Flask 只接受单个 json 变量并在设置两个变量时崩溃

Flask only accept single json variable and crashed when setting two variables

我正在 Google App Engine 上构建网络爬虫应用程序。我想使用 post 方法将变量传递给 Flask。然后,接收到的变量成为我的网络爬虫应用程序的输入。但是,Flask 只接受来自 post 的单个变量。如果我在函数中添加另一个变量,Flask 会崩溃。

我对 Flask 和 Google 应用引擎的了解有限。我为这个问题苦苦挣扎了好几天,非常感谢您的帮助。

函数失败

#server-side function that does not work,with 2 variable passed
@app.route('/bac',methods=['GET', 'POST'])
def bac():
    request_json = request.get_json()
    filename = request_json["filename"]
    url = request_json["url"]
    #baseconnect.Baseconnect(url=url,filename=filename).run()
    return filename,url

#The function to post on client side

import requests
req = requests.Session()
data = req.post('https://project.appspot.com/bac',json={"filename":"yuan","url":"https:...f5"})
print(data.text)

#output:
 Internal server eror 500

函数成功

#server-side function that works,with 1 variable passed
@app.route('/bac',methods=['GET', 'POST'])
def bac():
    request_json = request.get_json()
    filename = request_json["filename"]
    #url = request_json["url"]
    #baseconnect.Baseconnect(url=url,filename=filename).run()
    return filename

#The function to post on client side

import requests
req = requests.Session()
data = req.post('https://project.appspot.com/bac',json={"filename":"yuan"})
print(data.text)
#output:
 yuan

Flask 似乎只接受单个变量。有什么问题....

你这里的问题是 Flask 只有 returns Response 对象,Flask 会认为 return filename, urlreturn Response, status or header.

的快捷方式

这样的话,url就变成了http状态码或者header,显然是不对的

您需要 flask.jsonify() 到 return 所谓的 'multiple variables' 的正确格式。

像这样:(只有重要的部分)

# In server-side code
from flask import jsonify
@app.route('/bac',methods=['GET', 'POST'])
def bac():
    request_json = request.get_json()
    filename = request_json["filename"]
    url = request_json["url"]
    # Do your logic here
    return jsonify({ filename_returned: filename, url_returned: url })


# client-side
import requests
req = requests.Session()
json_data = req.post('https://project.appspot.com/bac',json={"filename":"yuan", "url": "http:xxxxxxx"})
real_data = json.loads(json_data)
# real_data should be the result you want