在 Django 多边项目中构建数据验证的最佳实践



我知道这是一个广泛的问题。但是,假设您有一个 Django 项目,其中包含移动应用程序客户端使用的 API。

可以在许多位置添加验证逻辑:

  • 模型字段本身
  • 模型,通过重写save()方法
  • Django 表单和模型表单。
  • API 序列化程序
  • (通用序列化程序或模型序列化程序(

在构建项目时,哪些规则/元素可帮助您选择是将验证放在这里还是放在那里?

这是一个观点和风格问题。我认为模型验证是绝对的要求,是防止错误的最后一道防线。模型验证到位后,您可以继续使用面向验证的表单、客户端和 API。

特定的模型验证

、字段或模型方法(或自定义管理器等(是样式的选择,以及适用于特定应用的内容,但保留模型验证。这是一个捕捉一切的地方。您可能有许多表单,许多 API,但有一个点是数据进入数据库。

django 的一个优点是,在许多情况下,模型验证会传播,例如 ModelForms。所以这也是一种便利,但这是一个很好的选择:模型验证本质上是通往数据库的最后一扇门,应该得到适当的处理。

旁注:"字段"验证实际上是"数据库验证"和"django 字段验证"。

为了尽可能遵守 DRY 原则:

  1. 使用通用验证器的 django 方法。因此,即使您在多个位置进行验证,也使用相同的验证。如果此验证发生更改,则会在所有位置更改,请参阅 https://docs.djangoproject.com/en/1.9/ref/validators/

  2. 如果可能,所有面向客户端的对象都应拉取模型验证并使用它们,或将它们映射到正确的客户端验证,类似于 ModelForms。

  3. 如果可能,请使用模型验证错误消息向客户端创建有意义的反馈。

但验证毕竟可能会重复步骤,主要是因为验证(至少(有两个角色:清理数据和向用户提供反馈。最好的例子是客户端验证。提供即时反馈很有用,无需往返服务器,但它会重复服务器端验证。模型验证只是确保当您添加更多表单、API、选项时,如果您忘记实现正确的验证 - 模型将阻止它。

最新更新