繁体   English   中英

如何在Django中request.method == None

[英]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在实际使用中永远NoneNone ,但是对于您的特定情况,您正在寻找错误的东西。

通用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', '') 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM