在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了,这个登录装饰器就完成了