gpt4 book ai didi

python - 如何在 Django 中 request.method == None

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:40 26 4
gpt4 key购买 nike

我正试图从 https://github.com/miki725/Django-jQuery-File-Uploader-Integration-demo/issues/1 中找出与 Django 相关的问题

Django 中request.method == None 什么情况下可以?

最佳答案

TL;DR: request.method 在实际使用中永远不会是 None,但对于您的特定情况,您正在查看错误的事情。

通用HttpRequest

django/http/__init__.py:

class HttpRequest(object):
...
def __init__(self):
...
self.method = None
...

当一个普通的HttpRequest被实例化时,它的方法是None。但是,WSGIRequestModPythonRequest 永远不会调用 HttpRequest.__init__

通过mod_wsgi请求

django/core/handlers/wsgi.py:

class WSGIRequest(http.HttpRequest):
...
def __init__(self, environ):
...
self.method = environ['REQUEST_METHOD'].upper()
...

总结一下,对于 mod_wsgi,request.method永远None。如果您以某种扭曲的方式设法使 environ['REQUEST_METHOD'] 未定义或成为 None,则请求将失败。

通过mod_python请求

django/core/handlers/modpython.py:

class ModPythonRequest(http.HttpRequest):
...
def _get_method(self):
return self.META['REQUEST_METHOD'].upper()
...
method = property(_get_method)

WSGIRequest 相同的注释适用。永远不能是 None

测试客户端

django.test.client.RequestFactory.request 实例化一个 WSGIRequest 并且每次使用 environ 中定义的 REQUEST_METHOD 调用 作为大写字符串,这是应该的。


总结:

assert request.method is not None

您在错误的地方寻找错误。在这种情况下,request.method == 'POST'。当 request.META.get('CONTENT_TYPE', '') 为 None 时失败。原因是客户端没有在请求中发送 Content-Type header (不要问我为什么,我不熟悉那些东西)。

关于python - 如何在 Django 中 request.method == None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7836834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com