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

Flask登录出现Bad Request错误,请求协助排查与修复

Flask登录报Bad Request错误的解决方法

你遇到的"Bad Request"错误根源很明确:表单里的输入框没有设置name属性。Flask的request.form依赖输入框的name属性来获取提交的值,没有这个属性的话,提交后request.form里不会包含username和password这两个键,直接用request.form['username']访问就会触发服务器无法理解的请求错误。

修复步骤:

1. 修改HTML模板login.html

给用户名和密码输入框添加对应的name属性,同时修正HTML结构并明确表单提交地址:

{% extends 'mastertemplate.html' %}

{% block title %}Login Page{% endblock %}

{% block content %}
<style>
    h1 {
        text-align: center;
    }
</style>
<body>
    <h1>Please Login</h1>
    <form method="post" action="/login">
        <table border="1" align="center">
            <tr><td>Login</td><td><input type="text" name="username" class="btLoginButton"></td></tr>
            <tr><td>Password</td><td><input type="password" name="password"></td></tr>
            <tr><td></td><td><input type="submit" value="login" class="btLoginButton"></td></tr>
        </table>
    </form>
</body>
{% endblock %}

注:子模板里不需要重复写<head>标签,应该把这类基础结构放在母版mastertemplate.html中,避免HTML结构混乱。

2. 修改路由里的内嵌表单

同样给输入框添加name属性,并修正HTML结构:

@app.route("/loginuser")
def loginpage():
    return render_template("login.html")

@app.route("/login", methods=['GET','POST'])
def login():
    if request.method == 'POST':
        # 用get方法避免键不存在直接报错,返回None可提前做参数校验
        username = request.form.get('username')
        password = request.form.get('password')
        if not username or not password:
            return "请输入用户名和密码"
        success, message, name = checklogin(username, password)
        if success:
            session['username'] = name
            return redirect('/balance')
        else:
            return message

    return """
    <html>
        <head>
            <title>Login</title>
            <style>
                h1 {
                    text-align: center;
                }
            </style>
        </head>
        <body>
            <form method="post" action="/login">
                <h1>Please Login</h1>
                <table border="1" align="center">
                    <tr><td>Login</td><td><input type="text" name="username" class="btLoginButton"></td></tr>
                    <tr><td>Password</td><td><input type="password" name="password"></td></tr>
                    <tr><td></td><td><input type="submit" value="login" class="btLoginButton"></td></tr>
                </table>
            </form>
        </body>
    </html>
    """

额外提示:使用request.form.get('key')替代直接方括号访问,能避免因用户未输入内容导致的直接报错,可提前对参数做合法性校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:06:10