def login_decorator(func):
'''
這個函數是一個登陸驗證的裝飾器,它還包含了對ajax登陸的驗證
:param func: func是對誰去裝飾,這個參數是被裝飾的一個函數
:return: 裝飾器裝飾事後,返回的一個新功能函數
'''
def login_handler(request,*args,**kwargs):
if request.user.is_authenticated():
return func(request,*args,**kwargs)
else:
if request.is_ajax():#這個方法能夠判斷當前的請求是否是ajax請求
return JsonResponse({'status':'nologin'})
url = request.get_full_path()
# request.get_full_path()這個方法能夠獲取全的路徑,包含協議和ip、get請求參數
#request.path它獲取的只是路徑部分,不包含協議和ip也不包含get請求參數
ret = redirect(reverse('users:user_login'))
ret.set_cookie('url',url)
return retajax
return login_handlercookie