Django中间件建议不要使用request.POST为什么?

时间:2018-03-16 00:28:18

标签: python django backend middleware

"在视图运行之前或在process_view()中访问中间件中的request.POST将阻止在中间件修改请求的上载处理程序之后运行的任何视图,并且通常应该避免。&# 34;

这是来自django文档。首先,如果我只是阅读POST,而不是改变它,它甚至知道它是如何阻止视图进行业务的呢?其次,CsrfViewMiddleware在这个意义上是如何不同的?

1 个答案:

答案 0 :(得分:1)

警告来自this ticketthis

  

Django目前懒得解析POST数据,但是middlware可能会尝试在请求上访问POST并触发解析,即使该函数本身从未触及POST。

  

如果POST数据相当大,这会给机器带来很高的负担......

  

这意味着视图将无法设置任何自定义上载处理程序,执行请求正文的自定义解析,或在接受文件上载之前执行权限检查。

关于CsrfViewMiddleware的区别明确地在docs中的所述警告下方明确说明:

  

CsrfViewMiddleware ...提供了csrf_exempt()和   csrf_protect()装饰器允许视图显式控制CSRF验证应该在什么时候进行   发生。