Django - 有时 request.POST 是可变的,有时不是
我正在处理一些遗留的 Django 代码。我有两个几乎相同的观点:
@login_required
def foo(request):
assert False, "foo mutable=%s" % request.POST._mutable
@login_required
def bar(request):
assert False, "foo mutable=%s" % request.POST._mutable
奇怪的是,对于其中一个处理程序,_mutable
为 True
,而对于另一个处理程序,_mutable
为 False
。
没有自定义中间件,并且生成的 Django 调试页面上的堆栈跟踪实际上是相同的。
当然,我可以通过使用 request.POST.copy()
或 request.POST._mutable = True
来解决这个问题 QueryDict
code> 对象可变,但我想知道是什么原因导致的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
默认情况下,它应该始终为
False
,Django 代码中将其设置为True
的唯一位置是在MultiPartParser.parse
,仅当CONTENT_TYPE 以
multipart
开头。来自
_load_post_and_files
在HttpRequest
中:来自
parse_file_upload
:来自
MultiPartParser.parse
:因此,如果一个视图正在获取多部分请求,而另一个视图则没有,这就可以解释这种差异。
By default it should always be
False
, the only place in the Django code that sets it toTrue
is in theMultiPartParser.parse
, which only happens if theCONTENT_TYPE
starts withmultipart
.From
_load_post_and_files
inHttpRequest
:From
parse_file_upload
:And from
MultiPartParser.parse
:So if one view is getting multipart requests and the other is not, that would explain the difference.