django的登录装饰器

在django开发的过程中,有框架自带的登录装饰器,

 

from django.contrib.auth.decorators import login_required

@login_required

但是这个登录装饰器有一定的不方便的地方,这里不在此进行说明。

在后续的开发过程中,这个登录装饰器已经不满足开发的需求,下面是我学习开发过程中写的一个装饰器,比以前的装饰器多了一些重定向的功能

​from django.shortcuts import redirect,reverse
from django.http import JsonResponse
def login_decorator(func):
    def inner(request,*args,**kwargs):
        if request.user.is_authenticated():
            return func(request,*args,**kwargs)
        else:
            if request.is_ajax():
                return JsonResponse({'status':'nologin'})
            #拿到目前访问的完整url,不只是路径部分
            url = request.get_full_path()
            ret = redirect(reverse('users:user_login'))
            ret.set_cookie('url',url)
            return ret
    return inner


​

这个登录装饰器记录了在没有登录的时候的页面url ,在用户登录过后直接跳转到之前的记录。

同时,还有ajax的登录进行判断,不过ajax不能够重定向到记录的URL。

在登录的页面添加下面的两行代码,删除系统运行中记录的cookie,将下面的内容换成重定向的那个返回就OK了

   url = request.COOKIES.get('url', '/')
                    ret = redirect(url)
                    ret.delete_cookie('url')
                    return ret

在ajax中加入登录判断

else if(callback.status == 'nologin'){
                    window.location.href = '{% url 'users:user_login' %}';

这里就OK了,这个登录装饰器就完成了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值