Mar*_*ius 5 forms datetime flask python-3.x flask-wtforms
当给定的日期时间格式不正确时,我想收到自定义错误消息。
表格类:
class NewShift(Form):
start_date = DateTimeField(u'start-date', validators=[DataRequired("Start must be specified")], format='%d.%m.%Y %H.%M')
end_date = DateTimeField(u'end-date', validators=[DataRequired("End must be specified")], format='%d.%m.%Y %H.%M') # ...
Run Code Online (Sandbox Code Playgroud)
风景:
def new_shift():
form = NewShift(request.form)
if request.method == "POST":
if not form.validate():
print(form.errors)
return render_template("add_shift.html", form=form, success=False)
else:
return render_template("add_shift.html", form=form, success=True)
Run Code Online (Sandbox Code Playgroud)
现在的问题是,如果DateTimeField()包含不正确的日期时间格式,我会从函数中收到错误消息DataRequired()。如何针对这种情况指定自定义错误消息?
我浏览了 WTForms 的文档,但没有得到任何结果,所以我的建议是使用自定义验证器创建 StringField,例如:
from datetime import datetime
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import ValidationError
class NewShift(FlaskForm):
start = StringField(u'Up and At Them')
end = StringField(u'Another Day in the Office')
def validate_start(form, field):
try:
datetime.strptime(field.data, '%d.%m.%Y %H.%M')
except Exception:
raise ValidationError('Wrong Input Format!')
def validate_end(form, field):
try:
datetime.strptime(field.data, '%d.%m.%Y %H.%M')
except Exception:
raise ValidationError('Wrong Input Format!')
Run Code Online (Sandbox Code Playgroud)
然后当你想存储数据时,只需执行一个strptime即可。