【问题标题】:Flask-WTF validation always failingFlask-WTF 验证总是失败
【发布时间】:2015-10-09 15:07:18
【问题描述】:

我正在使用Flask-WTF 进行表单验证,但验证失败了。

app.py

from flask import Flask
from flask import request
from flask import jsonify

app = Flask(__name__)

@app.route('/add', methods=['POST'])
def add_survey_entry():

    form = Survey_Form(csrf_enabled=False)

    if not form.validate_on_submit():
        return jsonify({'test': request.data})

Survey_Form.py

from flask_wtf import Form
from wtforms import TextAreaField
from wtforms import validators
from wtforms import StringField
from wtforms import IntegerField
from wtforms import RadioField

class Survey_Form(Form):

    name = StringField('name', validators=[
        validators.optional(),
        validators.Length(min=3, max=50)
    ])

    age = IntegerField('age', validators=[
        validators.required(),
        validators.number_range(min=18, max=99)
    ])

    message = TextAreaField('message', validators=[
        validators.optional(),
        validators.length(max=500)
    ])

当我向http://example.com/add 提交 POST 请求时,它总是失败并且request.data 为空。我使用以下请求:

curl http://127.0.0.1:5000/add -d "name=Bob&age=19&message=I+am+a+test+message"

任何想法我哪里出错了?

【问题讨论】:

    标签: python flask wtforms flask-wtforms


    【解决方案1】:

    您应该使用request.form 而不是request.data,如https://stackoverflow.com/a/16664376/1182891 中所述

    编辑 我的意思是在响应中,而不是表单构造函数

    if not form.validate_on_submit():
        return jsonify({'test': request.form})
    

    【讨论】:

    • 那行得通。但是,我必须将其传递到我的表单中吗?在文档中它说如果我使用 validate_on_submit 我不必传递任何表单数据。但问题仍然存在,即使发送了正确的数据,验证也会失败。
    • 放弃它,它现在可以工作了。我所做的只是删除了requests.form 并将其替换为requests.errors。这很奇怪,因为这与它上面的条件无关。尽管如此,我从RESTClient 切换到curl 并注意到它可以正常工作,所以可能就是这样。感谢您的回答。
    • 我的意思是在响应中,而不是在表单构造函数中。请参阅上面的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 2018-03-15
    相关资源
    最近更新 更多