我正在学习如何将WTForms和Flask一起用于新的应用概念验证。
我有一张表格。目标是要求至少3个姓氏的姓氏。
class PersonByNameForm(Form):
first_name = StringField('First Name', filters=none_filter)
last_name = StringField(validators=[InputRequired('Enter a Last Name'), Length(min=3)])
submit = SubmitField('SUBMIT')
我这样渲染表格
@app.route('/', methods=['GET'])
def index():
if request.method == 'GET':
form = PersonByNameForm()
return render_template('front_page.html', form=form)
HTML
<form action="person_profiles" method="post">
{{form.hidden_tag()}}
{{form.first_name.label}}
{{form.first_name}}
{{form.last_name.label}}
{{form.last_name}}
{{form.submit}}
</form>
表单本身将数据发布到
@app.route('/person_profiles', methods=['GET', 'POST'])
def person_profiles():
if request.method == 'GET':
# This is just place holder but this view will have copy of the form
form = PersonByNameForm()
form2 = FindPersonForm()
return render_template('person_profile.html', context=[], form=form, form2=form2)
else:
form = PersonProfileForm(request.form)
if form.validate_on_submit():
query = Session.query(schema.Person)
first_name = form.first_name.data
last_name = form.last_name.data
print(first_name, last_name)
if first_name:
query = query.filter(schema.Person.first_name.contains(first_name))
if last_name:
query = query.filter(schema.Person.last_name.contains(last_name))
return render_template('person_profile.html', context=query.all())
else:
print(form.errors)
error = form.errors
flash_errors(form, 'test')
return render_template('person_profile.html', error=error, form=form)
表单将validate_on_submit()
正确,并进入else块打印{'last_name': ['Enter a Last Name']}
我遇到的问题是,我不想实际渲染模板(它只是因为我现在必须返回一个响应)。并且屏幕上没有错误。
如果x字符在框中,我如何限制导航?如果没有验证,请刷新消息?
感谢您阅读
答案 0 :(得分:0)
我有点不清楚你的问题是什么。
表格将正确验证_on_submit()
所以输入的字符串至少有3个字符,对吧?
我遇到的问题是,我不想实际渲染模板(它只是因为我现在必须返回一个响应)。并且屏幕上没有错误。
要在调用flash
后闪烁错误消息,请使用已输入的值再次渲染模板。您必须渲染一些内容以包含Flash消息。
如果x字符在框中,我如何限制导航?如果没有验证,请刷新消息?
在名称中至少包含3个字符之前,是否要阻止提交表单(客户端)?
这可以通过在调用模板中的字段时传递max_length=3
来实现:
{{form.last_name(max_length=3)}}
显然,这里的问题是你直接在模板中传递3。 AFAIK,WTForms不会自动为您执行此操作。