簡體   English   中英

如何從燒瓶發送和接收數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM