1. 程式人生 > 其它 >Django 專案 裝飾器版登入校驗 從哪個頁面跳轉到登入頁的,登入後就返回到那個頁面

Django 專案 裝飾器版登入校驗 從哪個頁面跳轉到登入頁的,登入後就返回到那個頁面

urls.py 檔案設定:

views.py檔案設定:

from functools import wraps
def check_login(func):
@wraps(func) #裝飾器修復技術
def inner(request,*args,**kwargs):
ret= request.get_signed_cookie("is_login",default="0",salt="zhangces123")
if ret== "1":
return func(request,*args,**kwargs)
else:

next_url =request.path_info
return redirect("/login/?next={}".format(next_url))
return inner


def login(request):
if request.method == "POST":
user = request.POST.get("user")
password = request.POST.get("pwd")
# 從url中獲取到next引數
next_url = request.GET.get("next") 這是在post請求中 獲取get請求的資料 所以要在修改html的action資訊

print(next_url)
if user == "alex" and password == "123456":
if next_url: #如果有next_url 就跳轉到next_url頁面
ret=redirect(next_url)
else: #沒有就跳轉到home頁面
ret = redirect("/home/")
# ret.set_cookie("is_login","1") 這是設定不加鹽的cookie
# 設定加鹽的cookie
ret.set_signed_cookie("is_login","1",salt="zhangces123") #salt:加鹽
return ret
return render(request,"login.html")
@check_login
def index(request):
return render(request,"index.html")

login.html頁面:
<form action="{{ request.get_full_path }}" method="post">    #這裡的action資訊 要麼為空  要麼是request.get_full_path