Flask POST提交表单触发Bad Request错误问题咨询
错误成因
直接在地址栏访问http://127.0.0.1:5500/login时,浏览器默认发起的是GET请求,请求中不会携带任何表单提交数据。但你的后端login接口没有区分请求方法,不管是GET还是POST都直接执行request.form['name']读取表单字段,Flask在POST表单结构中找不到name字段时,会直接返回400 Bad Request响应,也就是你看到的“浏览器(或代理)发送了服务器无法解析的错误请求”提示。
修正方案
核心是给接口加请求方法判断,仅在用户提交表单的POST请求场景下读取表单数据,GET请求时直接返回表单页面即可。
1. 修正后端代码
调整local.py里的login视图函数逻辑,推荐用get()方法读取表单字段,避免字段缺失时直接抛错:
from flask import Flask, request, render_template app = Flask(__name__, template_folder='template') @app.route('/') def index(): return render_template('home.html') @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': # 用get读取字段,字段不存在时返回None,不会直接触发400错误 input_content = request.form.get('name') print(f"接收到用户输入:{input_content}") # 此处可添加自定义业务逻辑,比如参数校验、返回响应结果 # GET请求、POST处理完成后统一返回登录页 return render_template('login.html') if __name__ == '__main__': app.run(host="127.0.0.1", port=5500)
2. 优化前端表单配置(可选但推荐)
login.html里的表单action属性写死了本地绝对地址,后续更换端口、部署到服务器时需要手动修改,建议改成相对路径:
<!DOCTYPE html> <html> <body> <h1>login</h1> <form action="/login" method="POST"> <input type="text" placeholder="write your text here" name="name"> <input type="submit" value="Submit"> </form> </body> </html>
验证方式
- 启动服务后直接访问
http://127.0.0.1:5500/login,可以正常加载登录表单,不会触发400错误 - 在输入框填写任意文本后点击提交,后端控制台会正常打印输入的内容,页面可正常加载
内容的提问来源于stack exchange,提问作者newtopy
相关产品推荐
相关产品推荐

