验证动态内置于烧瓶中的表单

时间:2015-10-13 23:07:30

标签: python flask wtforms flask-wtforms

我在表单中发送数据时遇到问题,但实际情况并非如此。在视图中,我构建了一个动态形式的协议,在代码中有一些更复杂的模型要简单得多,但想法是一样的。 当我填写表格时,永远不会处理。我真的不知道可能是什么问题。

代码:

from wtforms import StringField,SubmitField
from flask.ext.wtf import Form

@preguntas.route('/pregunta/encuesta/', methods=['GET','POST'])
def view():
    class F(Form):
         pass

    #building form
    setattr(F,'funcion1', StringField(label='fun1'))
    setattr(F,'funcion2', StringField(label='fun2'))
    setattr(F,'enviar', SubmitField('enviar formulario'))

    formulario = F()

    if formulario.validate_on_submit():
        #never comes to this part of the code
        print "saving data..."


    return render_template('pregunta/page.html',form = formulario)

感谢您的回答

1 个答案:

答案 0 :(得分:0)

我认为您需要检查一些事项。您尝试验证的形式是什么?在您的代码示例中,我没有看到使用验证器。例如,

setattr(F,'funcion1', StringField(label='fun1', [validators.Length(max=10)]))

这应添加一个验证器,验证输入的字符数不超过10个。您可以将任何验证器添加到验证器列表中

此外,如果您使用CSRF保护和POST,则应将{{hidden_​​tag}} or {{formulario.csrf_token}}`作为表单中的第一个元素 您的模板中的表单应如下所示:

<form action="{{url_for('some_view'}}">
{{hidden_tag}}
<!-- rest of form elements --> 
</form>

并尝试查看您从表单中获得的错误:

formulario = F()
print formulario.errors
if formulario.validate_on_submit():
    # some code