实现Django中间件来实现响应行为

问题描述

我对django官方文档中的中间件描述有些困惑,并且似乎无法绕开它。

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

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()将从视图中获取响应,然后执行该响应之后的代码。最后,您需要从函数返回响应。这是可视化效果:

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