在cerbrus

时间:2018-05-02 11:07:46

标签: python validation cerberus

我正在尝试将字符串规范化为日期,以便在验证时它可以验证日期数据类型。

from cerberus import Validator
from datetime import datetime

v = Validator()
v.schema = {'start_date': {'type': 'date','coerce':datetime.date}}
v.validate({'start_date': '2017-10-01'})
>>> False

但它仍然返回false。我试图使用整数,它不确定为什么日期转换不起作用。

v = Validator()
v.schema = {'amount': {'type': 'integer','coerce': int}}
v.validate({'amount': '2'})
>>> True

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

我担心单独datetime.date不会将字符串转换为日期值。如果你在REPL中尝试这是你得到的:

>>> datetime.date('2017-10-01')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: descriptor 'date' requires a 'datetime.datetime' object but received a 'str'

尝试这样的事情:

from cerberus import Validator
from datetime import datetime

v = Validator()
to_date = lambda s: datetime.strptime(s, '%Y-%m-%d')
v.schema = {'start_date': {'type': 'datetime','coerce': to_date}}
v.validate({'start_date': '2017-10-01'})
>>> True

答案 1 :(得分:0)

也许使用这种方式更好:

def to_date(s):
    return datetime.strptime(s, '%Y-%m-%d')