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

ary*_*yan 12 django middleware

我有点困惑process_requestprocess_view.

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

那会是什么process_view呢?最初是为了执行任何视图而不是调用任何URL吗?像最初我想显示主页视图,但这也可以通过网址完成.

任何人都可以给我示例何时使用process_view

谢谢

Adr*_*uta 17

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

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

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

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

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

    [...]
Run Code Online (Sandbox Code Playgroud)


Uma*_*mad 6

Adrian Ghiuta 写了一个很好的答案。我只想补充几点。

process_request做URL匹配前被调用,process_viewURL匹配之后,但调用该视图之前被调用。

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