本文实例讲述了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'), ('_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',
)
那么就会有这样的输出,当然这只是针对单用户(这里拿我的博客开刀).在登陆后同时在首页输出cookies:
print request.COOKIES
{'csrftoken': '9fBE9Kh0uuzXEMzWdc4z4aIOoZg1EaoI', 'sessionid': 'lf4dd7xjlyzrh4yvzbtltlbujy3ipp1f', 'Hm_lvt_c65358e73ce306691a49ae5119f58783': '1405408338'}
登陆成功后Django会自动在客户端生成一个sessionid,且这个sessionid在未注销前一直不变,当注销后就改变了该sessionid了. Cookie中保存一个Session的索引编号(sessionid),其重要信恹g*[zacyTB]\HHBH\H\\B[ KBWАPSH Y\KN[ KB[\X[TH Y][ АPS Y\KY\XIB US B S KB T Y^XYIB TT Y\X[\Y\\B PST Y\X[ B PST ^X[
LB [Y[ BCBKBKBCB[\[^Z[]NUSYYHHYH\H[^][[[Y\BTH Y][ АPS Y\KY\XIB US ]][IB S KB T Y^XYIB TT Y\X[\Y\\KBKBCBRQUWTTH
B[ZY]KK\]PSZY]I\]\H\H\B[ZY]K[[[[ZY]IB[X[ZY]K[ZY]IBCB[ZY]KK]SZY]I\]\H\BBOB]B#/繣NB]\HHBH\H\\B+/繣CBTH Y][ АPS Y\KY\XIB US NIB S B T /y"z+k CBTT Y\X[\Y\\/ycb9yd)b&ya\Y\\[[Y9e&z+ PST Y\X[ B PST ^X[
LB [Y[ BCBKBKBCBBOB]B!i9$y.Y\[+$9.9i9.#yi*#:/"y. 9HYHZX[[KL
MY\\[\[\KX[XKXX[[H^\[\H[\Y\\[[H[HX[c'By."$y.*[.+y/oXK9kf9`9g*Y\i."B]\HHBH\H\\B\H[\[[Y][NB[KH[\CBH]H[\K][\]YKZNBK
][\]YKZI \\H[XHY B]\[]Y]H][[\[[BK
][\]YKZI]\HYH\[CB[XHHY][[YNBK
\][\]YKZI Y][[YIB[H][\H[Y\]BK[JIK CB[]][\H[Y\BK[JI H]\IK B[H\^\\[HNBK
][\]YKZI [ \\H[B
B \
KB \I
K
KB XIK KBJCBBOB]Bi9$y."y:/繣yyo#g:`*:/c9.+yc&a9i."[[OH\X[[^]\[Y\Y\[H\XK[B/+.Y\n9y"yo 9d+^];g :)yg*Y\Y\.+y/.K9i."B]\HHBH\H\\B[^]\[Y\Y\B[^]\H
BOB]B+9/ckk9$9.bza+Y\NB]\HHBH\H\\BXY\\\\BBOB]Bn#9&)[a]ny"y`9n+bx |