[英]How to send and receive data from flask?
我試圖將從client.py創建的python字典發送到我的webservice,讓webservice對數據執行某些操作,並將一個布爾值返回給client.py。 這是我到目前為止服務器和客戶端的代碼:
服務器端(在webservice.py內):
from flask import Flask
from flask import request
import json
app = Flask(__name__)
@app.route('/determine_escalation',methods = ['POST'])
def determine_escalation():
jsondata = request.form['jsondata']
data = json.loads(jsondata)
#stuff happens here that involves data to obtain a result
result = {'escalate':'True'}
return json.dumps(result)
if __name__ == '__main__':
app.run(debug=True)
客戶端(在client.py內):
import sys
import json
import requests
conv = [{'input': 'hi', 'topic': 'Greeting'}]
s = json.dumps(conv)
res = requests.post("http://127.0.0.1:5000/determine_escalation",data=s)
print res.text
但是當我打印出res.text時,我得到了這個:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>The browser (or proxy) sent a request that this server could not understand.</p>
我做錯了什么,我該如何解決這個問題? Flask和JSON的新東西,所以任何幫助表示贊賞。
好的 - 這里有幾個問題:
首先,您可以使用requests.get_json()在服務器端檢索您的JSON數據:
from flask import Flask
from flask import request
import json
app = Flask(__name__)
@app.route('/determine_escalation/', methods = ['POST'])
def determine_escalation():
jsondata = request.get_json()
data = json.loads(jsondata)
#stuff happens here that involves data to obtain a result
result = {'escalate': True}
return json.dumps(result)
if __name__ == '__main__':
app.run(debug=True)
此外,當您將數據放在一起時,而不是使用“data = s”發送請求,請使用“json = s”:
import sys
import json
import requests
conv = [{'input': 'hi', 'topic': 'Greeting'}]
s = json.dumps(conv)
res = requests.post("http://127.0.0.1:5000/determine_escalation/", json=s).json()
print(res['escalate'])
請注意,我在URL的末尾添加了斜杠 - 這只是一個很好的做法:-)
我還結合了MarcelK建議的更改 - 從布爾“True”(服務器端)中刪除引號,並使用.json()來解析客戶端上的響應 - 這些都是很好的建議。
我已經測試了這個修訂版(並重新修訂版),它運行正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.