本节课讲Cookie,饼干的意思,上次讲HttpResponse的时候没讲的地方
设置Cookie
将数据保存在客户端的应用,例如购物车
urls的配置
urlpatterns = [
path('set_cookie', views.set_cookie_view),
path('show_all3', views.show_all3_view),
]
models的配置
def set_cookie_view(request):
response = HttpResponse()
response.set_cookie('uname','zhangsan')
return response
进入,发现在response有,刷新,发现request里也有了cookie
进一个错误地址,发现报错的信息里还是有cookie值,说明已经保存在客户端了
关闭浏览器重启,发现错误地址没有cookie
默认放缓存即内存,关闭浏览器后就没有相应的内存,就没有cookie了
设置有效时间
看set_cookie源代码参数,有个max_age,单位是秒
response.set_cookie('uname','zhangsan',max_age=24*60*60)
如果设置一天,可以写计算式,比写计算结果更直观
可以看到还有过期时间expires
这个参数也可以自己写,
import datetime
response.set_cookie('uname','zhangsan',expires=datetime.datetime.today()+datetime.timedelta(days=2))
在规定的页面存储数据
例如购物车,我们只想在购物车页面访问时候有cookie
后面地址path写一个hello,只在这里保存缓存
import datetime
response.set_cookie('uname','zhangsan',expires=datetime.datetime.today()+datetime.timedelta(days=2), path='/stu/hello/')
访问该hello页面,会报错,但是能看到缓存信息
在Internet选项,查看缓存,全删了,最小化,刷新,看到hello/文件
把hello删了,就没有cookie了
加密salt
def set_cookie_view(request):
response = HttpResponse()
response.set_signed_cookie('uname', 'zhangsan', salt='fdsafdsa', max_age=24 * 60 * 60)
return response
进页面还是可以出来sname不一样
获取Cookie
配置urls
path('get_cookie', views.get_cookie_view),
配置views
def get_cookie(request):
str = request.COOKIES.get('uname')
pwd = request.COOKIES.get('pwd')
return HttpResponse(str,pwd)
是个字典,通过key可以获取值
可以设置多个
先设置cookie
再获取cookie
解密salt
异或可以加密和解密,刚才的是加过密的,通过加密的get_cookie可以获得解密的信息
def get_cookie(request):
uname = request.get_signed_cookie('uname',salt='fdsafdsa')
return HttpResponse(uname)
删除Cookie
- 默认关闭浏览器则失效
- max_age=-1
- expires=datetime.datetime.today()+datetime.timedelta(days=-2))
- response.delete_cookie(‘uname’,path=’/stu/hello/’)
测试下把4放在设置里,则cookie会删掉,找不到值
判断是否有Cookie
def get_cookie_view(request):
if 'uname' in request.COOKIES:
uname = request.get_signed_cookie('uname',salt='sdsafdsa')
return HttpResponse(uname)
else:
return HttpResponse('当前Cookie信息不存在')
注意新版python没有COOKIE.has_key的方法,改为in方法
另外加密和解密的salt要一致,否则会报错