django中间件process_request和process_view之间的区别

问题描述 投票:12回答:2

我对process_requestprocess_view有点困惑。

进程请求是您希望通过请求传递视图的内容。例子可以从request.user获得。

然后process_view做什么?是否在调用任何URL之前最初执行任何视图?像最初我想显示主页视图,但这也可以通过网址完成。

任何人都可以举例说明何时使用process_view

谢谢

django middleware
2个回答
15
投票

在Django确定哪个视图应该处理请求之前调用process_request(因此,它的唯一参数是request)。

在Django确定哪个视图将处理请求之后但在调用该视图之前调用process_view。它将有权访问request对象,以及将处理它的视图以及将传递给该视图的参数。

每当您需要知道将用于请求的视图时,您都可以使用process_view。一个很好的例子是Django's CSRF Middleware process_view,如果请求所针对的视图中存在csrf_exempt装饰器,它将不会强制实施CSRF保护:

def process_view(self, request, callback, callback_args, callback_kwargs):
    [...]

    if getattr(callback, 'csrf_exempt', False):
       return None

    [...]

1
投票

Adrian Ghiuta写了一个非常好的答案。我只是想补充一点。

在进行url匹配之前调用process_request,在url匹配之后但在调用该视图之前调用process_view

我们可以使用process_request来更改url本身,从而调用不同的视图。这一点帮助我理解了这些,所以我想回答它,也许它也是其他人。

© www.soinside.com 2019 - 2024. All rights reserved.