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, url
是 return 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
我正在 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, url
是 return 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