Django开发 员工管理系统:用户登录(初学,第三天)(2)-优快云博客文章浏览阅读279次,点赞20次,收藏8次。无状态:服务器不保存客户端请求的历史记录,每个请求独立处理。短链接:每次请求建立新连接,响应后立即关闭。每次请求都像初次见面,说完就忘,不留记忆。
https://blog.youkuaiyun.com/m0_65788436/article/details/145794624?fromshare=blogdetail&sharetype=blogdetail&sharerId=145794624&sharerefer=PC&sharesource=m0_65788436&sharefrom=from_link书接上回
1.示例:自定义 Django 中间件
(1)创建中间件类
这里定义了两个中间件,方便后面展示执行顺序
from django.utils.deprecation import MiddlewareMixin
class MiddlewareA(MiddlewareMixin):
def process_request(self, request):
print("MiddlewareA: 处理请求")
def process_response(self, request, response):
print("MiddlewareA: 处理响应")
return response
class MiddlewareB(MiddlewareMixin):
def process_request(self, request):
print("MiddlewareB: 处理请求")
def process_response(self, request, response):
print("MiddlewareB: 处理响应")
return response
(2)注册中间件
打开 settings.py 文件,找到 MIDDLEWARE 列表,将你创建的中间件添加到列表中:
把下面的加入到上面即可,employees是你的app名称,middleware.auth.SimpleMiddleware表示SimpleMiddleware方法的位置,即middleware文件夹下auth文件中SimpleMiddleware函数。记得加逗号
'employees.middleware.auth.MiddlewareA', # 添加自定义中间件
'employees.middleware.auth.MiddlewareB',
执行顺序是, MIDDLEWARE中谁在前面先执行谁,例如
请求阶段:中间件按照 MIDDLEWARE
列表中的顺序从上到下依次执行
先执行 MiddlewareA 的 process_request。
然后执行 MiddlewareB 的 process_request。
响应阶段:中间件按照 MIDDLEWARE
列表中的顺序从下到上依次执行
先执行 MiddlewareB 的 process_response。
然后执行 MiddlewareA 的 process_response。
输出
MiddlewareA: 处理请求
MiddlewareB: 处理请求
MiddlewareB: 处理响应
MiddlewareA: 处理响应
2.总结的几种中间件方法(关注返回情况)
用deepseek总结生成的
3.中间件实现登录校验
中间件: 登录页面必须要在不需要登录校验的列表中
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import redirect
class AuthMiddleware(MiddlewareMixin):
def process_request(self, request):
# 1.定义不需要登录校验的路径(如登录页面、静态文件等)
white_list = ['/login/'] # 根据实际情况调整
if request.path in white_list:
return # 放行,不需要登录校验
# 2.检查用户是否已登录
if not request.session.get("info"):
return redirect('/login/') # 未登录,重定向到登录页面
# 3.已登录,继续传递请求
return
注册:
效果
登录成功跳转
如果是没有登陆的状态,访问哪个管理界面,都只会返回登录的那个界面
学习:【最新Python的web开发全家桶(django+前端+数据库)-哔哩哔哩】 https://b23.tv/KbwbH6C