登录认证装饰器(cookie版)

def login_auth(func):
    def inner(request,*args,**kwargs):
        is_login=request.COOKIES.get('is_login')
        if is_login:
            #代表登录了
            return func(request,*args,**kwargs)
        else:
            #表示没有登录,重定向到登录页面
            # 本次请求的全路径,包括参数
            url=request.get_full_path()
            return redirect('/login_cookie/?ReturnUrl=%s'%url)
    return inner


def login_cookie(request):
    if request.method=='GET':
        return render(request,'login.html')
    if request.method == 'POST':
        user = models.User.objects.filter(name=request.POST.get('name'), pwd=request.POST.get('pwd')).first()
        if user:
            # 登录成功,写cookie
            # 登录成功,跳转到上次访问的页面
            last_url=request.GET.get('ReturnUrl')
            if last_url:
                obj= redirect(last_url)
            else:
                obj = redirect('/order/')
            obj.set_cookie('name',request.POST.get('name'))
            # obj.set_cookie('is_login',True,max_age=5)
            # 写的这个cookie只在order页面有效
            obj.set_cookie('is_login',True,path='/order/')
            return obj
        else:

            return redirect('/login_cookie/')
原文地址:https://www.cnblogs.com/xuqidong/p/12032637.html