【问题标题】:Flask/WTForms - post request doesnt send inputFlask/WTForms - 发布请求不发送输入
【发布时间】:2016-04-08 11:11:57
【问题描述】:

有人知道为什么我的帖子请求的正文是 None 吗? 我正在使用 Flask 和 WTForms。

我的表单.py

class SignupForm(Form):
    username = StringField('Username')
    password = PasswordField('Password')
    email = StringField('Email')
    submit = SubmitField('Create account')

我的路线.py

@app.route('/signup', methods=['GET', 'POST'])
def signup():
    form = SignupForm()

    if request.method == 'POST':
        app.logger.info(form.data)
        return redirect(url_for('signup'))
    elif request.method == 'GET':
        return render_template('signup.html', form=form)

我的注册.html

<form action="{{ url_for('signup') }}" method="POST">
    {{ form.username.label }}
    {{ form.username }}

    {{ form.password.label }}
    {{ form.password }}

    {{ form.email.label }}
    {{ form.email }}

    {{ form.submit }}
</form>

我的 routes.py 中的 app.logger.info(form.data) 返回我

{'password': None, 'submit': False, 'username': None, 'email': None}

即使我给了它一个用户名等并且我按下了提交按钮

【问题讨论】:

    标签: python flask wtforms flask-wtforms


    【解决方案1】:

    每次调用singup 时,您都会创建一个空表单。您应该使用请求中的数据(如果存在)填充它。

    @app.route('/signup', methods=['GET', 'POST'])
    def signup():
        form = SignupForm(request.form)
        if request.method == 'POST':
            # maybe call form.validate()
            app.logger.info(form.data)
            return redirect(url_for('signup'))
        elif request.method == 'GET':
            return render_template('signup.html', form=form)
    

    WTForm 就像一个模型定义。它不直接与 Flask 请求耦合,但它知道如何从请求中填充其字段。

    【讨论】:

    • 是的,你是对的。 + request.data 已弃用,我不得不使用 request.values
    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 2023-03-14
    • 2017-12-05
    • 2017-01-28
    • 1970-01-01
    • 2019-10-28
    • 2021-07-25
    相关资源
    最近更新 更多