1、问题
当使用Flask web框架开发的web网站时,这个轻型框架有很多拓展来供我们使用,对于后台管理,Flask-Admin能帮助我们减轻很多工作,让我们更专注于业务代码的编写,但是使用别人已经造好的轮子有时候会出现需要自定义的地方,比如我们想在Flask-Admin新建记录时使用我们自定义的校验器,我们该怎么做!
2、解决方案
Flask-Admin官方文档https://flask-admin.readthedocs.io/en/latest/introduction/ 中介绍有这么一段话
To specify WTForms field arguments:
form_args = {
'name': {
'label': 'First Name',
'validators': [required()]
}
}
我们能不能将required()换成自己定义的校验方法呢,肯定可以。
class MyView(ModelView):
...
# 自定义校验器,用来判断用户输入的日期是否小于当前日期
def date_validator(form, field):
input_date = datetime.datetime.strptime(field.data.strftime('%Y-%m-%d'), '%Y-%m-%d').date()
now_time = time.strftime("%Y-%m-%d", time.localtime())
now_date = datetime.datetime.strptime(now_time, '%Y-%m-%d').date()
if input_date < now_date:
raise ValidationError(u'所选日期不能小于当前日期!')
form_args = dict(
life_time=dict(validators=[date_validator])
)
...
我们在自定义的Views中定义了一个校验器,用来检验用户选择的日期是否合法。
试试我们的校验器是否起作用: