Django——cookie(登录状态)

新兵蛋子 / 2023-05-23 / 原文

cookie

由服务器下发,保存在本地浏览器上的一组组键值对。

  • 特点:

  1. 用于在本地浏览器中保存用户信息使用
  2. 由服务器让浏览器进行设置的
  3. 下次再访问时,自动携带
  4. 保存在网页的请求体中
  5. 是在http协议中使用的
  • 常用功能:

  1. 登录信息
  2. 保存浏览习惯
  • 网页中显示的位置:

  • 使用cookie:

from django.views import View

#使用装饰器来使用cookie
def login_required(func):
    def inner(request,*args,**kwargs):
        if request.COOKIES.get('is_login') != '1':   #判断是否存在cookie
            url = request.path_info   #获取当前用户需要访问的页面
            return redirect(f'/login/?return_url={url}')   #将用户需要登录的页面进行填充,然后登录完成后,将其原路返回。
        ret = func(reqeust,*args,**kwargs)
        return ret
    return inner

@login_required
class login(View):

    def get(self, request,*args,**kwargs): 
        return render(request, "login.html")
    
    def post(self, request,*args,**kwargs):
        username = request.POST.get('username')
        pwd = request.POST.get('pwd')
        if username == 'zhao' and pwd == 'abc':
            get_url = reqeust.GET.get('return_url')   #将用户需要访问的页面进行提取
            if not get_url:get_url='/index/'   
            ret = redirect(get_url)     #返回用户需要访问的页面,如果没有将访问首页
            ret.set_cookie('is_login':'1') #这里就是需要设置的键值对,并要求浏览器带有该键值对进行后续访问。
            return ret
        return render(reqeust,'lgoin.html',{'error':'用户名密码错误'})
@login_required
def index(request):
    return redirect('/index')
@login_required
def home(request):
    return redirect('/home')

创建好cookie后,用户发送的请求认证成功后,服务器会要求浏览器下一次带有cookie标签来访问。

 后续的重定向后,将会带有cookie进行访问