簡要說明
- 使用中間件對每個頁面都驗證登錄狀態(tài),驗證登錄的方法除外,否則會陷入循環(huán)
- 登錄狀態(tài)設(shè)置使用session
- 在驗證登錄的方法中:驗證成功時設(shè)置request.session["isLogin"] = True
- 在中間件中驗證登錄狀態(tài):
if request.session.get("isLogin"): return None - 中間件中返回None代表繼續(xù)執(zhí)行,返回登錄頁面代表無登錄狀態(tài)
- 瀏覽器關(guān)閉時清除session,確保用戶每次進(jìn)入系統(tǒng)先進(jìn)行登錄
開啟session
設(shè)置settiings
INSTALLED_APPS = [
'django.contrib.sessions',
]
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
]
# 是否關(guān)閉瀏覽器使得Session過期(默認(rèn)false)
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
數(shù)據(jù)庫使用默認(rèn)的sqlite3
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3')
}
]
views中使用session
- 設(shè)置session,登錄驗證完成,密碼無誤后執(zhí)行
request.session["isLogin"] = True
驗證登錄中間件
- app(backStage)目錄下創(chuàng)建myMiddleware.py 名字自取
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import render
class isLogin(MiddlewareMixin):
def process_request(self, request):
if request.session.get("isLogin"):
return None
# views中驗證登錄的def demo_toLogin()對應(yīng)的url不使用中間件
if "demo_toLogin" in request.path:
return None
return render(request, "demo/login.html")
- settings中設(shè)置中間件
MIDDLEWARE = [
'backStage.myMiddleware.isLogin'
]