【问题标题】:flask-wtf form not sending form data?flask-wtf 表单不发送表单数据?
【发布时间】:2020-02-18 21:57:30
【问题描述】:

对于上下文,我正在尝试创建一个 flask-wtf 表单。我已经这样做了,并且显示正确:

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Sign In')

@APP.route('/')
def index():
    return render_template('login.html', form=LoginForm())

@APP.route('/login', methods=['POST', 'GET'])
def login():
    print(request.method, request.get_json())
    return redirect('/')  # temporary

这是html:

{% block content %}
    <h1>Sign In</h1>
    <form action="/login" method="post" enctype='application/json'>
        {{ form.hidden_tag() }}
        <p>
            {{ form.username.label }}<br>
            {{ form.username(size=32) }}
        </p>
        <p>
            {{ form.password.label }}<br>
            {{ form.password(size=32) }}
        </p>
        <p>{{ form.submit() }}</p>
    </form>
{% endblock %}

但是,当我输入任何内容并单击提交时,从login() 打印的内容是POST None。我不明白为什么没有发送数据。作为强制它为 json 的尝试,我添加了 enctype='application/json' 并且之前或之后都没有。

我错过了什么?

【问题讨论】:

    标签: python flask flask-wtforms


    【解决方案1】:

    您不能将表单作为 JSON 发布,只有 3 options for enctype

    login() 函数中,您可以通过 request.form 访问表单,或者在使用 wtforms 时,在视图中初始化表单以填充 hte 数据:

    def login():
        login_form = LoginForm()
    
        if login_form.validate_on_submit(): # this runs only on POST, and checks validation
            username = form.username.data
            password = form.password.data
        ...
    

    【讨论】:

    • 如果我没记错的话,你会错过一个 if。无论如何,谢谢!
    • 很好,已修复:)
    猜你喜欢
    • 2014-11-18
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    相关资源
    最近更新 更多