Python Flask POST 400 错误请求错误

新手上路,请多包涵

我正在尝试使用 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()

在浏览器中运行时返回 400 错误,但客户端脚本得到正确的响应:

 <!DOCTYPE html>
<html>
<body>

<h1>Temperature</h1>
<p>15</p>

</body>
</html>

其中 15 是 data[‘Temp’] 变量。

原文由 SalamalCamel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

如果您只是导航到 http://10.0.0.119 那么您将发送 GET 请求到 def result() 这将导致错误的请求,因为没有 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>

原文由 rykener 发布,翻译遵循 CC BY-SA 3.0 许可协议

您发送了错误的请求。您必须使用 json=data 将其作为 JSON 发送

r = requests.post('http://10.0.0.119', json=data)

原文由 furas 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题