You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:36:20