小谈Django中的Cookie
cookie
cookie是服务器发出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对
原理:
由服务器产生内容,浏览器收到请求后保存在本地,当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断是谁来了.
获取cookie
request.COOKIES['key'] # request.COOKIES.get('key')
request.get_signed_cookie('key',default=RAISE_ERROR,salt='',max_age=None)
设置cookie
rep = HttpResponse(...)
rep = render(request,...)
rep指代response对象
rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt='加密盐',...)
参数:
- key:键 value:值
- max_age=None 超时时间
- expires=None 超时时间(IE浏览器用的)
- path='/' cookie生效的路径, / 表示根路径,特殊的: 根路径的cookie可以被任意的url访问
- domain=None cookie生效的域名
- secure=False https传输
- httponly=False 只能http协议传输,无法被JavaScript获取(不绝对)
删除cookie
def logout(request):
rep = redirect("/login/")
# 删除用户浏览器之前设置的user的cookie的值
rep.delete_cookie("user")
return rep
cookie版登录校验
def login_required(func):
def innner(request, *args, **kwargs):
is_login = request.COOKIES.get('is_login')
if is_login != '1':
return redirect('/login/?returnUrl={}'.format(request.path_info))
ret = func(request, *args, **kwargs)
return ret
return innner
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
if username == 'alex' and password == 'dsb':
return_url = request.GET.get('returnUrl')
ret = redirect(return_url if return_url else '/classes/')
ret.set_cookie('is_login', '1')
return ret
return render(request, 'login.html')