我邀请表单,其中两个字段定义为人员和电子邮件,如下所示:
class InviteForm(Form):
person = TextField("person", validators=[validators.Required("Please enter persons name.")])
email = EmailField("email", validators=[validators.Required("Please enter valid email."), validators.Email("Please enter valid email.")])
def validate(self):
return validate_form(self)
其中validate_form函数是一个cusotm验证器,用于检查邀请的几个条件。
我的要求是允许用户一次邀请多个人。为了实现这一点,我添加了jquery函数,它以html格式复制这些字段,并允许邀请多个人。
但问题是在我的视图函数中,当我从post请求中提取结果时,它只给出了第一个人的信息。我怎样才能得到所有人的详细信息。我的观点定义如下:
@app.route("/invite", methods=["GET", "POST"])
def invite():
invite_form = InviteForm()
if invite_form.validate_on_submit():
print invite_form.person
print invite_form.email
这只提供一个字段,而不是字段数组。
这可能与python wtf一起使用吗?怎么样?
答案 0 :(得分:6)
您正在寻找的是FormField
,它可以让您构建WTF字段列表(或甚至是组)。
这是一个简单的例子 - 它将三个字符串字段呈现为html列表,因为它是最低要求。如果你想通过javascript添加额外内容,那么只需遵循相同的命名方案,在下面的情况中,第四个名称为person-3
。
from flask import Flask, render_template_string
from flask.ext.wtf import Form
from wtforms import FieldList, StringField
app = Flask(__name__)
app.secret_key = 'TEST'
class TestForm(Form):
person = FieldList(StringField('Person'), min_entries=3, max_entries=10)
foo = StringField('Test')
@app.route('/', methods=['POST', 'GET'])
def example():
form = TestForm()
if form.validate_on_submit():
print form.person.data
## [u'One', u'Two', u'Three']
return render_template_string(
"""
<form method="post" action="#">
{{ form.hidden_tag() }}
{{ form.person }}
<input type="submit"/>
</form>
""", form=form)
if __name__ == '__main__':
app.run(debug=True)