bgc*_*ode 18 django django-models django-forms django-views
将输入验证与Django项目中的模型级验证分开是否典型?例如,验证用户名符合命名标准将是输入验证,并且验证用户尚未在数据库中是模型级验证.
我一直在查看同事的代码,他们将两种类型的验证都放在表单类中(在forms.py中).这是典型的设置,还是模型级别验证出现在模型或视图中更常见?
或者有更好的方法来接近这个 - 比如使用ModelForm?我对Django很新,并试图了解这种情况的推荐模式.
dan*_*era 14
这是一个非常有趣的问题(对我而言).
在我看来,所有验证代码都应该移到模型代码中.这是不破坏业务规则的方法.当验证代码在模型中时,不可能忘记新表单中的某些验证或以多种形式存在不一致的规则.
我链接到你'Django,在模型的保存方法'中提出与你的相关的验证错误.在下面的问题中,您可以看到如何将代码验证从表单移动到模型.我希望这个简短的介绍对您有所帮助.
你从什么框架来?如何在您的环境中写出验证规则?
我不同意接受的答案.我更喜欢使用模型级验证来避免模型中的不一致,以及针对任何特定于站点的限制的表单级验证.
假设我们有一个事件模型,包含datetime开始和结束时间的字段.模型验证会迫使我们在开始时间之后有一个结束时间.但是,我会将其保留在表单中,以验证新创建的事件不在过去.因此,如果我必须添加过去发生的事件,我可以使用特定于管理员的表单,该表单允许过去的日期,或者只是将其直接添加到数据库中.
因此,模型验证应该只检查明显错误的值.但是如果你需要做一些时髦的东西(例如机器人的用户名中的Unicode字符),它应该让你这样做,即使它只是通过管理员或shell.我已经阅读了StackOverflow的答案,该答案建议始终在后端代码中使用表单,使用代码填充字段form["field"] = "value",以便从一致的验证中受益.
| 归档时间: |
|
| 查看次数: |
2925 次 |
| 最近记录: |