【问题标题】:(BadRequestKeyError) Don't know where the problem is(BadRequestKeyError) 不知道问题出在哪里
【发布时间】:2021-07-13 05:09:55
【问题描述】:

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

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.

顺便说一句,甚至在网页加载之前,而不是在我提交表单时,都会引发错误。

Python:

# 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)

我的登录页面运行良好,就是这样。

【问题讨论】:

  • @mechanical_meat 它有效!非常感谢,真是个愚蠢的错误 XD,我什至在 DOM 中也将表单请求设置为 POST。
  • 没关系。我实际上并不确定是否可以使用 HTTP GET 发送表单数据,所以我删除了我的评论,但我确定这不是你想要做的,因为你没有任何东西可以获取值来自 URL。
  • 我很高兴你能成功 :)
  • 是的,我想知道您为什么删除了评论,如果您想要声誉,请回答问题

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 2012-02-18
    • 2022-11-16
    • 1970-01-01
    相关资源
    最近更新 更多