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

Flask路由返回400 Bad Request,无法渲染HTML模板问题排查

排查Flask 400 Bad Request错误的几个关键点

嘿,我帮你梳理了下代码里的问题,这应该就是你遇到400错误的核心原因:

1. 路由未区分请求方法,直接读取表单导致报错

你的/sign路由同时支持POST和GET方法,但函数里直接去取request.form['amount']这类字段——当用GET请求访问该路由时(比如直接在浏览器输入http://localhost:5000/sign),request.form是空的,强行访问不存在的键就会触发Flask的400错误。

修正方案:

只在POST请求时处理表单数据,GET请求返回表单页面或做重定向:

from flask import request, render_template

@app.route('/', methods=['POST', 'GET'])  # 注意这里之前的拼写错误已经修正
def main_page():
    return render_template('sign.html')

@app.route('/sign', methods=['POST', 'GET'])
def SignResource():
    if request.method == 'POST':
        # 用get()方法替代直接索引,避免字段缺失时直接报错
        data = {
            "amount": request.form.get('amount'),
            "payway": request.form.get('payway'),
            "description": request.form.get('description')
        }
        # 这里可以添加数据校验、存储等逻辑,比如返回结果页面
        return render_template('sign_result.html', data=data)
    # GET请求时返回表单页面
    return render_template('sign.html')

2. 根路由的拼写错误

你第一个路由写的是@app.rout('/', ...)——这里rout少了字母e,正确写法是@app.route,这个错误会导致根路径/无法正常注册,用户访问根目录会得到404,虽然不是当前400错误的直接原因,但必须修正。

3. HTML表单的语法小问题

你的input标签里多了不必要的逗号,而且遗漏了div闭合标签,虽然浏览器可能兼容,但不符合规范:

<form action="http://localhost:5000/sign" method="post">
    <div class="pay_info">
        <input type="text" name='amount' value="12.34">
        <input list="currency_list" name="payway" autofocus>
        <datalist id="currency_list">
            <option value="RUB">
            <option value="USD">
            <option value="EUR">
        </datalist>
        <div class='description_text'>
            <input type="text" name='description' value='Test description'>
        </div>
        <input type="submit">
    </div> <!-- 补上遗漏的闭合div -->
</form>

把这些问题修正后,再测试提交表单,应该就能正常渲染模板、处理数据了。

内容的提问来源于stack exchange,提问作者Ivan Pozniak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:06:17