gpt4 book ai didi

python - Flask 引发 TypeError : The view function did not return a valid response

转载 作者:太空宇宙 更新时间:2023-11-03 21:22:54 25 4
gpt4 key购买 nike

我正在尝试使用 Python Flask 创建一个 REST API,它通过 POST 接收 XML 文件。我希望 API 读取 XML 的内容,并查找一个参数/键(“目录”),以决定将其发送到何处,就像到其他 Web 应用程序的总机一样。

主要问题是我在使用 Flask request.data 或 request.form 时不断收到 500 个错误 - 根据其他类似的帖子,这些方法之一应该适用于 XML。

常见的 500 错误解释是“TypeError: View 函数没有返回有效的响应。该函数要么返回 None,要么在没有 return 语句的情况下结束。”

我尝试过基于其他 StackOverflow 线程的命令行 cURL 请求一次发送一个 XML,但与我编写的用于发送 XML 的客户端 Python 程序(使用 requests 库)相比没有区别。

我一直用来 cURL 到 API 的 XML 格式

<?xml version="1.0" encoding="UTF-8" ?>
<xml>
<Directory>Directory 2</Directory>
<ID>2</ID>
<Name>Jane</Name>
</xml>

Python Flask API 代码:

from flask import Flask, request
import xmltodict
import requests

app = Flask(__name__)

@app.route("/XMLhandling", methods=["POST"])
def handleXML():
#for debugging..
if True:
print("HEADERS", request.headers)
print("REQ_path", request.path)
print("ARGS", request.args)
print("DATA", request.data)
print("FORM",request.form)
#parse the XML
datacache = xmltodict.parse(request.form)
print(datacache)
print(datacache['xml']['Directory'])
if datacache['xml']['Directory'] == "Directory 1":
requests.post("http://localhost:25565/XML",data = xml)
elif datacache['xml']['Directory'] == "Directory 2":
requests.post("http://localhost:50001/XML",data = xml)
else:
return 400

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

很乐意在需要时提供额外信息。

最佳答案

发生错误是因为 View 未返回 valid response .

如果找不到目录,问题中的代码将返回 400;如果成功,则返回 None(Python 函数返回 None如果函数末尾没有显式的 return 语句)。这些值都不是有效的响应。

由于这是一个 API,我们只关心返回 HTTP 状态代码,但 Flask 也要求我们提供响应:在这种情况下,我们可以使用空字符串作为响应正文。

在错误情况下我们返回

'', 400 

以及成功案例

'', 200 

(如果我们只返回一个字符串,状态代码将默认为 200,返回显式代码表明我们的意图)。

这段代码应该可以工作:

@app.route("/XMLhandling", methods=["POST"])
def handleXML():
#for debugging..
if True:
print("HEADERS", request.headers)
print("REQ_path", request.path)
print("ARGS", request.args)
print("DATA", request.data)
print("FORM",request.form)
#parse the XML
datacache = xmltodict.parse(request.form)
print(datacache)
print(datacache['xml']['Directory'])
if datacache['xml']['Directory'] == "Directory 1":
requests.post("http://localhost:25565/XML",data = xml)
elif datacache['xml']['Directory'] == "Directory 2":
requests.post("http://localhost:50001/XML",data = xml)
else:
# Return empty response body and status code.
return '', 400
# Returning empty body with no status code would work here too.
return '', 200

关于python - Flask 引发 TypeError : The view function did not return a valid response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54101449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com