如何从Flask发送和接收数据?

2024-04-26 10:17:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将从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>

我做错了什么,我该怎么解决?新的烧瓶和JSON的东西,所以任何帮助是赞赏。


Tags: pyimportclientwebjsonapp客户端data
1条回答
网友
1楼 · 发布于 2024-04-26 10:17:59

好的-这里有几个问题:

首先,可以使用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()在客户端解析响应—这两个都是很好的建议。

我已经测试了这个修订版(和重新修订版),它工作得很好。

相关问题 更多 >