Flask / WTForms - 发布请求不发送输入

时间:2016-01-04 18:57:50

标签: python flask wtforms flask-wtforms

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

我的forms.py

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

我的route.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)

我的signup.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}

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

1 个答案:

答案 0 :(得分:3)

每次调用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请求相关联,但它知道如何从请求中填充其字段。