本文实例讲述了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', )