BadRequestKeyError:400 错误请求:浏览器(或代理)发送了该服务器无法理解的请求。关键错误:“搜索”标题

问题描述 投票:0回答:2

应用程序.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="." method="post">
        Search: <input type="text" name="search">
        <input type="submit" value="Show">
   </form>
</body>
</html>

main.py

from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def index():
    return render_template('index.html')

@app.route('/CmpPr')
def cmpP():
    return render_template('CmpPr.html')

@app.route('/CmpSpes')
def cmpS():
    return render_template('CmpSpes.html')

@app.route('/App', methods=['POST', 'GET'])
def App():
    search = request.form['search']
    return render_template('output.html', n=search)

@app.route('/Gro')
def Gro():
    return render_template('Gro.html')

if __name__ == '__main__':
   app.run(debug=True)

我创建了多个 html 页面

我想打印消息,从 TextBox 请求(上面的代码)并打印到另一个 html 页面

我尝试使用 request.form.get('search') 但它返回 null

如果我使用 request.form.get('search', FALSE 或 TRUE) 它会返回 FALSE 或 TRUE

我还使用了 if else 循环来指定 GET 和 POST 方法,但仍然显示相同的错误

任何人都可以帮我解决这个问题吗

谢谢你

python html flask
2个回答
0
投票

首先,您的表单操作应该指向处理表单数据的视图(即

/App
):

<form action="/App" method="post">

其次,您应该只在请求方法为

POST
时获取表单数据,因为您已经在模板中设置了
method="post"
。另外,当请求方法为
GET
时,您需要渲染包含表单的 App.html:

@app.route('/App', methods=['POST', 'GET'])
def App():
    if request.method == 'POST':  # get form data when method is POST
        search = request.form['search']
        return render_template('output.html', n=search)
    return render_template('App.html')  # when the method is GET, it will render App.html 

附注您收到的错误已清楚地解释为表单数据中没有名为

search
的键。


0
投票

你可以试试这个,对我有用

@app.route('/predict_home_price', methods=['POST'])
def predict_home_price():
    try:
        data = request.get_json()  # Expecting JSON data

        # Check if required data is provided
        if not data:
             return jsonify({'error': 'No JSON data received'}), 400
© www.soinside.com 2019 - 2024. All rights reserved.