【问题标题】:Python Flask ValueError: View function did not return a response [duplicate]Python Flask ValueError:查看函数没有返回响应[重复]
【发布时间】:2017-03-04 14:23:38
【问题描述】:

这是我的 Flask 代码:

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def signal():
    if request.method == 'POST':
        content = request.get_json()
        return content
    else:
        return 'Hello, world!'

if __name__ == '__main__':
    app.run(debug=True)

我运行这个 HTTP Post(从同一台机器):

import requests
import json
dump= '{"on":"true"}'
r = requests.post('http://127.0.0.1:5000', dump)

并收到此错误:

[2017-03-04 14:18:35,250] ERROR in app: Exception on / [POST]
Traceback (most recent call last):
File "c:\users\andrew\appdata\local\programs\python\python35-32\lib\site-packages\flask\app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "c:\users\andrew\appdata\local\programs\python\python35-32\lib\site-packages\flask\app.py", line 1615, in full_dispatch_request
return self.finalize_request(rv)
File "c:\users\andrew\appdata\local\programs\python\python35-32\lib\site-packages\flask\app.py", line 1630, in finalize_request
response = self.make_response(rv)
File "c:\users\andrew\appdata\local\programs\python\python35-32\lib\site-packages\flask\app.py", line 1725, in make_response
raise ValueError('View function did not return a response')
ValueError: View function did not return a response

关于为什么会发生这种情况的任何想法?一开始在网上看,以为是因为没有else,万一是GET,但现在看不懂了。

【问题讨论】:

  • 缩进错误,还是只是复制/粘贴?
  • 可能是复制粘贴,但您的具体意思是什么?在中频下?

标签: python json flask


【解决方案1】:

如果你正在测试直接返回你的 post 请求负载,你应该做 jsonify 并且 flask 有这个 util 函数

from flask import Flask
from flask import request, jsonify

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def signal():
    if request.method == 'POST':
        content = request.get_json()
        return jsonify(content)
    else:
        return 'Hello, world!'

if __name__ == '__main__':
    app.run(debug=True)

然后在您的测试代码中,将Content-Type 添加到标题中,(没有这个,request.get_json() 将不起作用):

dump = '{"on":"true"}'
r = requests.post('http://127.0.0.1:5000', data=dump,
                  headers={'Content-Type': 'application/json'})

【讨论】:

  • 这不会触发错误。
  • @Vallentin 会的,因为如果没有payload,contentNoneType,Flask不允许NoneType作为返回值
  • 确实如此。但是考虑到测试条件,那么content 不应该是NoneType
  • @Vallentin 啊哈,这里还有第二个错误。请求中未指定 Content-Type,因此 request.get_json() 将不起作用
  • 哦,不错的收获!那就给我+1! :)
【解决方案2】:

看起来 - 问题在于您的脚本正在向您的应用程序发出请求。尝试使用 curl,如下所示:

$ curl -H "Content-type: application/json" -X POST http://127.0.0.1:5000 -d '{"on":"true"}'

你会得到如下回复:

{
  "on": "true"
}

您的代码(添加 jsonify)应如下所示:

from flask import Flask
from flask import request,jsonify 

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def signal():
    if request.method == 'POST':
        content = request.json
        return jsonify(content)
    else:
        return 'Hello, world!'

if __name__ == '__main__':
    app.run(debug=True)

【讨论】:

  • 是否应该在我的终端中显示响应?
  • 是的!您正在使用两个终端。一个用于您的烧瓶应用程序,另一个用于运行 curl 命令。 Curl 将响应您的 JSON 对象。
猜你喜欢
  • 1970-01-01
  • 2018-05-16
  • 2014-04-01
  • 2018-01-14
  • 1970-01-01
  • 2015-09-26
  • 2015-01-07
  • 1970-01-01
  • 2015-11-09
相关资源
最近更新 更多