Django session驗證登錄

簡要說明

  • 使用中間件對每個頁面都驗證登錄狀態(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'
]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容