问题描述
我对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