【问题标题】:django middleware difference between process_request and process_viewdjango中间件process_request和process_view之间的区别
【发布时间】:2015-10-29 06:23:16
【问题描述】:

我对@9​​87654321@ 和process_view 有点困惑。

处理请求是您希望通过请求传递视图的东西。示例可以取自request.user

那么process_view 做了什么?是在调用任何 url 之前执行任何视图吗?就像最初我想显示主页视图一样,但这也可以从 url 完成。

谁能给我举个例子什么时候使用process_view

谢谢

【问题讨论】:

    标签: django middleware


    【解决方案1】:

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

    process_view 在 Django 确定哪个视图将处理请求之后调用,但在调用该视图之前。它将可以访问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
    
        [...]
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-31
        • 2020-07-18
        • 2017-08-25
        • 2023-03-06
        • 1970-01-01
        • 2017-04-14
        • 2013-12-15
        相关资源
        最近更新 更多