"在视图运行之前或在process_view()中访问中间件中的request.POST将阻止在中间件修改请求的上载处理程序之后运行的任何视图,并且通常应该避免。&# 34;
这是来自django文档。首先,如果我只是阅读POST,而不是改变它,它甚至知道它是如何阻止视图进行业务的呢?其次,CsrfViewMiddleware在这个意义上是如何不同的?
答案 0 :(得分:1)
警告来自this ticket和this。
Django目前懒得解析POST数据,但是middlware可能会尝试在请求上访问POST并触发解析,即使该函数本身从未触及POST。
如果POST数据相当大,这会给机器带来很高的负担......
这意味着视图将无法设置任何自定义上载处理程序,执行请求正文的自定义解析,或在接受文件上载之前执行权限检查。
关于CsrfViewMiddleware的区别明确地在docs中的所述警告下方明确说明:
CsrfViewMiddleware ...提供了csrf_exempt()和 csrf_protect()装饰器允许视图显式控制CSRF验证应该在什么时候进行 发生。