Flask 视图返回错误“视图函数未返回响应”
- 2024-11-27 10:43:00
- admin 原创
- 14
问题描述:
我有一个视图,它调用一个函数来获取响应。但是,它给出了错误View function did not return a response
。我该如何修复这个问题?
from flask import Flask
app = Flask(__name__)
def hello_world():
return 'test'
@app.route('/hello', methods=['GET', 'POST'])
def hello():
hello_world()
if __name__ == '__main__':
app.run(debug=True)
当我尝试通过添加静态值而不是调用函数来测试它时,它可以工作。
@app.route('/hello', methods=['GET', 'POST'])
def hello():
return "test"
解决方案 1:
以下不会返回响应:
@app.route('/hello', methods=['GET', 'POST'])
def hello():
hello_world()
你的意思是说...
@app.route('/hello', methods=['GET', 'POST'])
def hello():
return hello_world()
请注意在此固定功能中添加的return
。
解决方案 2:
无论视图函数中执行什么代码,视图都必须返回Flask 可识别为响应 的值。如果函数不返回任何内容,则相当于返回None
,这不是有效的响应。
除了return
完全省略语句之外,另一个常见错误是仅在某些情况下返回响应。如果您的视图根据if
或try
/有不同的行为except
,您需要确保每个分支都返回响应。
这个不正确的示例不会对 GET 请求返回响应,它需要在后面加上一个返回语句if
:
@app.route("/hello", methods=["GET", "POST"])
def hello():
if request.method == "POST":
return hello_world()
# missing return statement here
这个正确的例子在成功和失败时返回响应(并记录失败以供调试):
@app.route("/hello")
def hello():
try:
return database_hello()
except DatabaseError as e:
app.logger.exception(e)
return "Can't say hello."
解决方案 3:
在这个错误信息中,Flask 抱怨说。对响应function did not return a valid response
的强调表明它不仅仅是函数返回一个值,而是一个可以打印消息、返回状态代码等的有效对象。因此,这个简单的示例代码可以写成这样:flask.Response
@app.route('/hello', methods=['GET', 'POST'])
def hello():
return Response(hello_world(), status=200)
或者如果包裹在 try-except 子句中则更好:
@app.route('/hello', methods=['GET', 'POST'])
def hello():
try:
result = hello_world()
except Exception as e:
return Response('Error: {}'.format(str(e)), status=500)
return Response(result, status=200)
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD