[英]How can request.method == None in Django
我正在尝试从https://github.com/miki725/Django-jQuery-File-Uploader-Integration-demo/issues/1找出与Django相关的问题
在什么情况下request.method == None
在Django中request.method == None
?
TL; DR: request.method
在实际使用中永远None
是None
,但是对于您的特定情况,您正在寻找错误的东西。
HttpRequest
django/http/__init__.py
:
class HttpRequest(object):
...
def __init__(self):
...
self.method = None
...
实例化纯HttpRequest
,其方法为None
。 但是,然后WSGIRequest
和ModPythonRequest
不会调用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', '') is None
时失败。 原因是客户端没有在请求中发送Content-Type
标头(不要问我为什么,我对那些东西不熟悉)。
我能够通过AJAX做到这一点,特别是使用“ POST”类型但没有数据调用jQuery的$ .ajax函数(请参阅http://api.jquery.com/jQuery.ajax/ ):
$.ajax({
type: "POST",
url: "/something",
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.