首页 > 解决方案 > Flask - url_for() 即使在 request.get 修复后也缺少参数

问题描述

我目前正在使用 Flask,并且一直遇到此错误:

“profile_creation:缺少 1 个必需的位置参数:'user'”

因此,我查看了该站点上的一些帖子,大多数答案都涉及添加request.args.get(). 所以,我对帖子做了我能做的,并对我的代码进行了编辑,但我仍然收到错误消息。这就是我现在所拥有的:

@app.route("/profile-creation", methods = ['GET', 'POST'])
def profile_creation(user):
    user = request.args.get("x")
    form = ProfileForm()

    if form.validate_on_submit():
        ...

        return redirect(url_for('/home'))


@app.route("/register", methods = ['GET', 'POST'])
def register():
    form = RegistrationForm()

    if form.validate_on_submit():
        hashed_password =     bcrypt.generate_password_hash(form.password.data).decode('utf-8')

        user = User(username = form.username.data, first_name = form.first_name.data, last_name = form.last_name.data,
            email = form.email.data, password = hashed_password)

    return redirect(url_for('profile_creation', x = user))

这两个页面都与用户填写带有个人信息的表单有关(注册帐户,然后发布一些个人资料,例如年龄等)。我在哪里错了?任何帮助将不胜感激。谢谢你。

标签: pythonhtmlflask

解决方案


如果您user在表单中的 URL 中/profile-creation?user=my_user,则使用

@app.route("/profile-creation", methods = ['GET', 'POST'])
def profile_creation(): # Note: no user argument here
    user = request.args.get("my_user")

如果相反,它就像/profile-creation/my_user

@app.route("/profile-creation/<user>", methods = ['GET', 'POST'])
def profile_creation(user):
    # user argument will be set to 'my_user'

推荐阅读