为响应行为实现 Django 中间件

Implement Django middleware for response behaviour

我对官方 django 文档中的中间件描述有点困惑,似乎无法理解它。

在实现基于 class 的中间件时,它看起来像这样(例如来自文档):

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

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

请求和响应都会调用中间件。这是我的第一个问题:

如何根据处理的是请求还是响应来实现不同的行为?

此外,这是相关的,我有点困惑,因为似乎还有一种旧的不推荐使用的编写中间件的方式,可以覆盖方法 process.request()process_response() .我不确定现在这种编写中间件的方式是否可取。通常,Django 文档很准确,但这部分(对我来说)有点混乱。

有人可以帮我解决这个问题吗?

基本上responses = self.get_response(request)之前的代码应该处理请求。 self.get_response() 将从视图中获取响应,之后的代码应该处理响应。最后,您需要 return 函数的响应。这是一个可视化:

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

    def __call__(self, request):
        # Codes here will process the request
        # -----------------------------------
        response = self.get_response(request)
        # -----------------------------------
        # Codes here will process the response
        return response