东湖之滨 发表于 2024-6-11 20:31:37

Django中心件

中心件只是功能。
对于process_request方法:


[*]无返回或返回None,哀求继承向后走
[*]有返回值,return direct,return HttpResponse,return render,不会继承向后走,直接执行process_response函数
可以自己界说属于自己的中心件。
# 自行创建一个文件名为 md.py

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse, redirect

class MiddlewareDemo(MiddlewareMixin):
        def process_request(self, request):
                # 无需做验证,放行
                if request.path_info in ['/example'/]:
                        return

                # 获取用户session的信息
                userInfo = request.session.get("userInfo")

                # 有值,表示已登录,则继续
                if userInfo:
                        return
               
                # 无值
                return redirect('/example/')

        def process_response(self, request, response):
                # 必须得返回
                return response
创建好自界说的Middleware之后,须要在settings.py里植入。
MIDDLEWARE = [
        ....
        # 添加下面一行
        "utils.md.MiddlewareDemo",
]

中心件的应用场景


[*]日记,获取访问时,哀求的 IP 地址并记到文件中。
[*]权限校验,有权限返回None,无权限就返回HttpResponse("无权访问")
[*]登录判定,判定用户的session中是否存储信息。
点个赞呗~

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Django中心件