举报投诉联系我们 手机版 热门标签 鳄鱼CMS
您的位置:鳄鱼CMS > django 中间件 Django4.0 中间件-编写自己的中间件

django 中间件 Django4.0 中间件-编写自己的中间件

2023-04-26 17:31 Django4中文教程

django 中间件 Django4.0 中间件-编写自己的中间件

django 中间件

Django 中间件是一种可以插入 Django 项目请求/响应处理流程的框架。它允许开发者在不修改 Django 核心代码的情况下,对请求/响应进行额外的处理。它是一个非常有用的工具,可以用来实现认证、权限、会话、CSRF 保护和其他功能。

Django 中间件是一个 Python 类,它必须实现 process_request() 和 process_response() 方法。process_request() 方法在 Django 视图函数之前被调用,而 process_response() 方法则在视图函数之后被调用。这些方法都有一个 HttpRequest 对象作为参数,并返回一个 HttpResponse 对象。

class MyMiddleware:

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)

        # Code to be executed for each request/response after the view is called.

        return response

    def process_view(self, request, view_func, view_args, view_kwargs):
        # Code to be executed for each request/response before the view is called.

        return None

Django4.0 中间件-编写自己的中间件

中间件工厂是一个可调用的程序,它接受 ​get_response ​可调用并返回中间件。中间件是可调用的,它接受请求并返回响应,就像视图一样。

中间件可以被写成这样的函数:

def simple_middleware(get_response):
    # One-time configuration and initialization.

    def middleware(request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.

        response = get_response(request)

        # Code to be executed for each request/response after
        # the view is called.

        return response

    return middleware

或者它可以写成一个类,它的实例是可调用的,如下:

class SimpleMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

    def __call__(self, request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.

        response = self.get_response(request)

        # Code to be executed for each request/response after
        # the view is called.

        return response

Django 提供的 ​get_response ​响应可能是实际视图(如果这是最后列出的中间件),或者它可能是链中的下一个中间件。不需要知道或关心当前的中间件到底是什么,它只是代表了下一步的内容。
以上是一个轻微的简化——链中最后一个中间件调用的 ​get_response ​可不是实际视图,而是处理程序的包装方法,它负责应用 ​view middleware​,调用具有适当URL参数的视图,并应用 ​template-response​ 和 ​exception ​中间件。
中间件可以只支持同步Python(默认),或异步Python,或者二者都支持。
中间件可以放在 Python 路径上的任何地方。

__init__(get_response)

中间件工厂必须接受 ​get_response ​参数。还可以初始化中间件的一些全局状态。记住两个注意事项:

  • Django仅用 ​get_response ​参数初始化您的中间件,因此不能定义 ​__init__()​ ,因为需要其他参数。
  • 与每个请求调用一次的 ​__call__()​ 方法不同,​__init__()​ 仅在 Web 服务器启动时调用一次。

标记未使用的中间件

在启动时确定是否应该使用一个中间件有时是有用的。在这些情况下,您的中间件的 ​__init__()​ 方法可能会引发 ​MiddlewareNotUsed​。Django 将从中间件进程中删除该中间件,并将调试消息记录到 ​django.request​ 日志:设置 ​DEBUG ​为 ​True​。


阅读全文
以上是鳄鱼CMS为你收集整理的django 中间件 Django4.0 中间件-编写自己的中间件全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 鳄鱼CMS eyucms.com 版权所有 联系我们