(BadRequestKeyError) 不知道问题出在哪里

时间:2021-04-19 00:21:58

标签: python python-3.x dictionary flask key

我正在尝试制作一个注册页面,页面上有两个密码字段,一个用于密码本身,第二个用于确认密码(当然还有用户名):

HTML:

<div class="fields">
    <input id="usr" type="text" name="username" placeholder="Username" required>
    <input id="pass" type="password" name="password" placeholder="Password" required>
    <input id="confirmpass" type="password" name="confirm_password" placeholder="Confirm password" required>
</div>

我知道错误是什么和意味着什么,它是一个 KeyError 意味着它找不到我传递给 requests.form 的密钥,这些错误的大多数情况都是拼写错误,所以我检查了多次拼写,甚至复制粘贴相同的字符串。

我的问题是我不知道为什么第三个字段^不在requests.form中,也许是因为我有两种密码类型?但我没有看到任何地方说这是不允许的。

错误:

File ...
if request.form["confirm_password"]==request.form["password"]
File ...
raise exceptions.BadRequestKeyError(key)
werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.

该错误在网页加载之前引发,而不是在我提交表单时引发。

蟒蛇:

# Accounts = JSON File
@app.route("/signup",methods=["GET","POST"])
def signup():
    if request.method=="GET":
        if request.form["confirm_password"]==request.form["password"]: # Where the error traces back to
            if request.form["username"]not in Accounts.keys():
                Accounts[request.form["username"]]=Accounts["Default"]
                Accounts[request.form["username"]]["Password"]=request.form["password"]
                redirect(url_for("login",name=request.form["username"]))
            else:return render_template(Signup,valid="Username already taken",name=request.form["username"])
        else:return render_template(Signup,valid="Password confirmation does not match password",name=request.form["username"])
    else:return render_template(Signup)

我的登录页面完美无缺,仅此而已。

1 个答案:

答案 0 :(得分:2)

您设置路由的方式表明您希望收到 POST 请求。因此,您的代码当前错误地期待 GET 请求。

快速解决方法是将路由的第一行更改为:

def signup():
    if request.method == "POST":
        # ...