本人正在测试一个项目,基本思想就是在一个页面里实现对“对象”的“增减删改”。
下图是添加一个“对象”
删除一个“对象”如下图:
如上图所示,我们看到了“对象”被删除了,但是出现了一些错误提示。
出现错误提示的原因是因为我使用了 flask-wtf 的表单验证。
form.py
内容如下:
class AddZoneForm(FlaskForm):
name = StringField(u'单位名称', validators=[DataRequired(),
Regexp(ur'^[\u4E00-\u9FFF]+$', flags=0, message=u'用户名必须为中文')])
status = SelectField(u'状态', choices=[(u'True', u'正常'), (u'False', u'注销') ])
submit = SubmitField(u'添加单位')
def validate_name(self, field):
if Zone.query.filter_by(name=field.data).first():
raise ValidationError(u'单位名称已被注册!')
class DeleteZoneForm(FlaskForm):
zone_id = StringField()
class EditZoneForm(FlaskForm):
name = StringField(u'单位名称', validators=[DataRequired(),
Regexp(ur'^[\u4E00-\u9FFF]+$', flags=0, message=u'用户名必须为中文')])
status = SelectField(u'状态', choices=[(u'True', u'正常'), (u'False', u'注销')])
submit = SubmitField(u'修改单位')
def validate_name(self, field):
if Zone.query.filter_by(name=field.data).first():
raise ValidationError(u'单位名称已被注册!')
html
页面的部分 jinja2
代码如下:
<!-- 错误信息form提示 -->
{% for field_name, field_errors in addZoneForm.errors|dictsort if field_errors %}
{% for error in field_errors %}
<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<strong>{{ addZoneForm[field_name].label }}错误:</strong> {{ error }}
</div>
{% endfor %}
{% endfor %}
<!-- 错误信息form提示 end -->
出现错误提示的问题是因为我在删除对象的时候,上面代码没有获取到 addZoneForm
表单的信息。删除上面的代码当然能解决问题,但是为了用户的界面友好性,我复制上面的 jinja2
代码,加上了对 deleteZoneForm
的验证。这时,问题就出现了,不管是增加“对象”还是删除“对象”都会出现错误提示,因为出现了冲突。
那么,如何能够在保证界面的用户友好性,提示的信息越详细越好的情况下,不出现那些不知所谓的错误。
前端渲染不用
wtforms
自带的组件渲染自己写 HTML,然后用 Ajax 返回提示信息