Flask引发TypeError:视图函数未返回有效响应

时间:2019-01-08 23:57:25

标签: python flask

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

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

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

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

我一直在使用的XML格式将URL卷曲到API

if(string.includes('%20')) {
   const arr = str.split('%20');
}

Python Flask API代码:

div

很高兴在需要时提供额外的信息。

1 个答案:

答案 0 :(得分:0)

发生错误是因为视图未返回有效响应。

如果成功处理了请求,则未指定响应,因此该函数将返回None,这不是有效的响应。

如果请求未成功处理,该函数将返回整数400,这也不是有效的响应。

对于一个API来说,仅返回一个HTTP状态代码就足够了,因此该函数可以返回一个空字符串以获取成功-这将导致200 OK响应-或一个空字符串和状态码来表示不成功要求。您可以了解有关烧瓶响应here的更多信息。

此代码应该有效:

@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
    # Return empty body (Flask will default to 200 status code)
    return ''