[英]Python Flask POST 400 Bad Request Error
我尝试使用flask将数据发布到网站,当我尝试返回数据时,出现400 Bad Request错误。
这是我发送POST请求的python代码:
import requests
from random import randint
def Temp():
return randint(0,20)
data = {'windspeed':WindSpeed(), 'Temp': Temp(), 'WindDir':WindDir()}
r = requests.post('http://10.0.0.119', data = data)
print (r.text)
这是服务器代码:
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route("/", methods=['GET','POST'])
def result():
data = request.get_json(force=True)
Temp = data['Temp']
return render_template('main.html', name=Temp)
if __name__ == "__main__":
app.run()
在aa浏览器中运行时,这将返回400错误,但客户端脚本会得到正确的响应:
<!DOCTYPE html>
<html>
<body>
<h1>Temperature</h1>
<p>15</p>
</body>
</html>
其中15是data ['Temp']变量。
如果您只是浏览到http://10.0.0.119
那么您将向def result()
发送GET请求,这将导致请求失败,因为没有data['Temp']
为了在浏览器中实现此功能,您需要从应用程序本身发送POST请求,然后才能查看它。
您的应用可能是:
import requests
from random import randint
from flask import Flask, request, render_template
app = Flask(__name__)
def Temp():
return randint(0,20)
@app.route("/", methods=['GET','POST'])
def result():
if request.method == 'POST':
data = request.form.get('data')
Temp = data['Temp']
return render_template('dispaly_data.html', name=Temp)
else:
data = {'Temp': Temp()}
return render_template('post_data.html', data=data)
if __name__ == "__main__":
app.run()
您在post_data.html
的表格可能类似于:
<form action="/" method='post'>
<input type="hidden" name="data" value="{{ data }}"/>
<input type='submit' value='Send Post'>
</form>
您发送了错误的请求。 您必须使用json=data
将其作为JSON发送
r = requests.post('http://10.0.0.119', json=data)
您既不会在客户端中发布JSON,也不会在浏览器中发布JSON,因此请勿尝试在服务器中将其作为JSON处理。 只需使用request.form
用于POST请求)或request.args
用于GET请求)来访问值:
@app.route("/", methods=['GET','POST'])
def result():
if request.method == 'POST':
data = request.form
else:
data = request.args
temp = data.get('Temp')
return render_template('main.html', name=temp)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.