• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Django框架设置cookies与获取cookies操作详解

python 搞代码 4年前 (2022-01-09) 29次浏览 已收录 0个评论

本文实例讲述了Django框架设置cookies与获取cookies操作。分享给大家供大家参考,具体如下:

在Django里面,使用Cookie和Session看起来好像是一样的,使用的方式都是request.COOKIES[XXX]和request.session[XXX],其中XXX是您想要取得的东西的key, 很久以前,写过一篇 django怎么处理session 的文章:django 自定义session 处理, 今天对cookies 进行了同样的操作:

from django.template import loader ,Context
from django.http import HttpResponse
def main(request):
   #不用模板
   response= HttpResponse('test')
   response.set_cookie('my_cookie','cookie value')
   return response
def main(request):
   #用模板
   response= render_to_response('xxxx.html', {})
   response.set_cookie('my_cookie','cookie value')
   return response

使用模板的情况和不使用模板的情况都做了测试, 可以向浏览器设置cookies, 在客户端可以用javascript 取出来:

function getCookie(c_name)
{
if (document.cookie.length>0)
 {
 c_start=document.cookie.indexOf(c_name + "=")
 if (c_start!=-1)
  {
  c_start=c_start + c_name.length+1
  c_end=document.cookie.indexOf(";",c_start)
  if (c_end==-1) c_end=document.cookie.length
  return unescape(document.cookie.substring(c_start,c_end))
  }
 }
return ""
}

用上面的javascript 函数可以取出cookies, 如果需要在django 里面取出 cookies 呢,也很简单:

value = request.COOKIES["cookie_key"]

同样的道理,也可以用 javascript 写 cookies,

function setCookie(c_name,value,expiredays)
{
var exdate=new Date()
exdate.setDate(exdate.getDate()+expiredays)
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
}

上面总结了用 django 读写cookies 与 用javascript 读写cookies. 根据不同的情况, 这两种方法是经常混合在一起使用的.

一.Django authentication

django authentication 提供了一个便利的user api接口,无论在py中 request.user,参见Request and response objects.还是模板中的{{user}}都能随时随地使用,如果从web开发角度来看,其实无非就是cookie与session的运用.

在项目首页,在登陆和注销状态下分别输出所有session,如:

print request.session.items()
# 登陆状态下输出
[('domain', 'http://beginman.sinaapp.com'), ('_auth_user_backend', 'django.contrib.auth.backends.ModelBackend'), ('_<em style="color:transparent">本文来源[email protected]搞@^&代*@码网(</em>auth_user_id', 1L)]
# 注销状态下输出
[('domain', 'http://beginman.sinaapp.com')]

从输出结果中可知晓,如果项目中settings.py配置如下:

#中间件
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware', #看这里
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware', #看这里
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.gzip.GZipMiddleware',  # 处理gzip压缩,减轻服务器压力
    'pagination.middleware.PaginationMiddleware', # django 第三方分页
    'common.mymiddleware.Mymiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
#TEMPLATE_CONTEXT_PROCESSORS
# 注意django1.5的这个玩意儿与低版本的不同
# 参考:https://docs.djangoproject.com/en/1.3/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS = (
  "django.contrib.auth.context_processors.auth",
  "django.core.context_processors.debug",
  "django.core.context_processors.i18n",
  "django.core.context_processors.media",
  "django.core.context_processors.static",
  "django.core.context_processors.request",
  "django.contrib.messages.context_processors.messages"
)
  INSTALLED_APPS = (
  'django.contrib.auth',  #this
  'django.contrib.contenttypes', #this
  'django.contrib.sessions', #this
  'django.contrib.sites',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  # Uncomment the next line to enable the admin:
  'django.contrib.admin',
  # Uncomment the next line to enable admin documentation:
  # 'django.contrib.admindocs',
  'mysite',
)


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Django框架设置cookies与获取cookies操作详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址