<分区>
我知道这是一个广泛的问题。 但是让我们假设您有一个 Django 项目,其中包含移动应用程序客户端使用的 API。
有很多地方可以添加验证逻辑:
- 模型字段本身
- 模型,通过覆盖
save()
方法 - Django 表单和模型表单。
- API 序列化器(通用序列化器或模型序列化器)
在构建项目时,哪些规则/元素可以帮助您选择验证应该放在这里还是放在那里?
<分区>
我知道这是一个广泛的问题。 但是让我们假设您有一个 Django 项目,其中包含移动应用程序客户端使用的 API。
有很多地方可以添加验证逻辑:
save()
方法在构建项目时,哪些规则/元素可以帮助您选择验证应该放在这里还是放在那里?
最佳答案
这是一个意见和风格问题。我认为模型验证是绝对必要的,是防止错误的最后一道防线。一旦模型验证到位,您就可以继续进行表单、客户端和面向 API 的验证。
特定模型验证、字段或模型方法(或自定义管理器等)是样式的选择,适用于特定应用程序,但保留模型验证。这是一个捕捉一切的地方。您可能有多种形式、多种 API,但只有一个点是数据进入数据库的地方。
django 的优点之一是在许多情况下模型验证传播,例如模型形式。所以这也是一种便利,但拥有它是件好事:模型验证本质上是通往数据库的最后一扇门,应该得到妥善处理。
旁注:“字段”验证实际上是“数据库验证”和“django 字段验证”。
尽可能遵守 DRY 原则:
使用通用验证器的 django 方法。因此,即使您在多个地方进行验证,您也使用相同的验证。如果此验证发生变化,它会随处发生变化,请参阅 https://docs.djangoproject.com/en/1.9/ref/validators/
如果可能,所有面向客户端的对象都应该提取模型验证并使用它们,或者将它们映射到正确的客户端验证,类似于 ModelForms。
如果可能,使用模型验证错误消息为客户创建有意义的反馈。
但验证毕竟可能会重复步骤,主要是因为验证有(至少)两个作用:清理数据,并向用户提供反馈。最好的例子是客户端验证。提供即时反馈很有用,无需往返服务器,但它会重复服务器端验证。模型验证只是确保当您添加更多表单、API 和选项时,如果您忘记实现正确的验证 - 模型将阻止它。
关于python - 在 Django 多边项目中构建数据验证的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35338324/