sra*_*l07 5 python flask wtforms flask-wtforms
我有一个邀请表单,其中有两个字段定义为person和email,如下所示:
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)
Run Code Online (Sandbox Code Playgroud)
其中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
Run Code Online (Sandbox Code Playgroud)
这只给出一个字段,而不是字段数组.
这可能与python wtf?怎么样?
您正在寻找的是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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1673 次 |
| 最近记录: |