小谈Django中的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')
posted @ 2020-10-12 20:22  richard_A  阅读(67)  评论(0编辑  收藏  举报