【发布时间】:2014-12-05 12:47:17
【问题描述】:
在我的应用中,我有一个自定义用户模型,其中包含性别、出生日期等额外字段。
我通常使用不同的方式创建/更新用户(REST API 中的 Web 服务、Django 表单),这意味着我不能依靠表单验证来验证用户数据。
这就是为什么我问自己如何使用户验证尽可能干净。
我决定通过覆盖 User 类中的 save() 方法来做到这一点:
def save(self, *args, **kwargs):
# Will prevent from entering bad formated data.
self.full_clean()
# If birth_date provided, need to be younger than current date
if self.birth_date and self.birth_date > datetime.now().date():
raise EXC_FUT_DATE
super(User, self).save(*args, **kwargs)
- 我首先使用 full_clean() 方法检查提供的数据 符合用户字段要求(例如,性别需要是“M” 或“F”)
- 我进行了额外的功能验证,例如:“出生日期是过去吗?”
它似乎按预期工作,但我不确定是否遵循此处的最佳做法。 整个目的是保持 DRY(在一个地方有验证逻辑),并且这个验证逻辑适用于用户创建/修改,无论它使用 Django 表单还是 web 服务。
对此模式有何评论?也许是其他想法?非常感谢。
【问题讨论】:
标签: python django design-patterns django-users