简要说明
- 使用中间件对每个页面都验证登录状态,验证登录的方法除外,否则会陷入循环
- 登录状态设置使用session
- 在验证登录的方法中:验证成功时设置request.session["isLogin"] = True
- 在中间件中验证登录状态:
if request.session.get("isLogin"): return None
- 中间件中返回None代表继续执行,返回登录页面代表无登录状态
- 浏览器关闭时清除session,确保用户每次进入系统先进行登录
开启session
设置settiings
INSTALLED_APPS = [
'django.contrib.sessions',
]
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
]
# 是否关闭浏览器使得Session过期(默认false)
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
数据库使用默认的sqlite3
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3')
}
]
views中使用session
- 设置session,登录验证完成,密码无误后执行
request.session["isLogin"] = True
验证登录中间件
- app(backStage)目录下创建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()对应的url不使用中间件
if "demo_toLogin" in request.path:
return None
return render(request, "demo/login.html")
- settings中设置中间件
MIDDLEWARE = [
'backStage.myMiddleware.isLogin'
]