django模型中的跨域验证器
django-xvalidate的Python项目详细描述
django xvalidate允许您在 Django模型。
例如,考虑一个名为Event
的django模型。
fromdjango.dbimportmodelsclassEvent(models.Model):title=models.CharField(max_length=255)start_date=models.DateField()end_date=models.DateField()
django xvalidate允许您声明开始日期早于结束日期 日期如下:
fromdjango.dbimportmodelsfromxvalidateimportXValidatedModel,XLeclassEvent(XValidatedModel,models.Model):title=models.CharField(max_length=255)start_date=models.DateField()end_date=models.DateField()classXVMeta(XValidatedModel.XVMeta):spec=[XLe('start_date','end_date').message('The start date should precede the end date')]
XValidatedModel
确保维护此规范
调用Event.clean()
并将ValidationError
提升为
适当的。
为什么使用django xvalidate?
django xvalidate允许您指定如何验证模型实例
以比在
clean()
方法。如果没有django xvalidate,您将不得不
将上述示例实现为
defclean(self):super(Event,self).clean()if(self.start_dateisnotNone)and(self.end_dateisnotNone):if(self.end_date<self.start_date):raiseValidationError('The start date should precede the end date')
对于更具声明性的格式,我们可以在 将来自动创建通过(或失败)的测试数据 验证。
django xvalidate带来了一些运算符重载,它带来了语法上的 加糖给你的声明,使它们非常容易阅读。例如, 您可以指定:
((XF('end_date')-'start_date')>datetime.timedelta(days=4)).message('Event should last at least 5 days')
django xvalidate还允许使用django的双下划线(__
)
取消引用相关对象的语法,从而实现简洁的定义,如
如下所示
(XF('registration_date')<='event__end_date').message('Must register before the event ends')