使用 Flask wtform DateTimeField 的无效日期时间格式的自定义错误消息

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()。如何针对这种情况指定自定义错误消息?

Agu*_*ado 2

我浏览了 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即可。