【问题标题】:Why my Django view return None as HttpResponse?为什么我的 Django 视图将 None 作为 HttpResponse 返回?
【发布时间】:2017-07-05 16:45:15
【问题描述】:

这是我在 Django 视图中用于接受 post 请求的函数,但有时它返回 None,你知道这个问题吗?

def acceptpost(request):
    try:
        print "request.method:", request.method
        print "content_type:", request.content_type
        print "request.body:",request.body
        time.sleep(0.1)
    except Exception as e:
        log.error(e)
        return HttpResponse("error")
    return HttpResponse("OK")

我用来发布数据的函数是:

def post_data(url, data)
    try:
        req = requests.post(url=url, data=data, verify=False)
        response = req.status_code
        content = req.content
    except RequestException as e:
        response = e.response
        log_debug.error("HttpResponse: %s" % response)
        continue

这个函数在While True, url 为:url = 'http://127.0.0.1:8000/acceptpost/'。

在大多数情况下,我可以得到正确的 HttpResponse,在这种情况下是“ok”,有时我只能得到 None,这两个函数都在 localhost 上运行,Web 服务器是 Django Web 服务器地址为http://127.0.0.1/acceptpost/。 我没有捕获任何登录功能acceptpost,但是偶尔有HttpResponse None,您知道这个问题吗?

【问题讨论】:

  • 你能显示你帖子的完整代码吗? url 数据
  • 您好,问题已修改。

标签: python django


【解决方案1】:

您的代码本身似乎没有问题。你得到的None 来自e.response,这里等于None。这可能意味着您的请求没有发送,因此没有响应。

RequestException 是一个涵盖多种异常的通用异常。我建议您查看this manual page (不确定它是否是最新的,但仍然可以很好地了解您可以获得的许多例外情况)。我认为区分代码中的大多数异常将有助于您调试它。

【讨论】:

  • 谢谢,没错,当有RequestException时,在我的情况下,e.response是None,更详细的信息可以通过e.message获取,另一种获取更多信息的简单方法是使用日志.error(e) 而不是 log.error(e.response)。
猜你喜欢
  • 2020-08-31
  • 1970-01-01
  • 2016-07-06
  • 2017-01-25
  • 2021-09-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多