繁体   English   中英

Python Flask POST 400错误请求错误

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM