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

标签 python django api rest django-rest-framework

<分区>

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

有很多地方可以添加验证逻辑:

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

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

最佳答案

这是一个意见和风格问题。我认为模型验证是绝对必要的,是防止错误的最后一道防线。一旦模型验证到位,您就可以继续进行表单、客户端和面向 API 的验证。

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

django 的优点之一是在许多情况下模型验证传播,例如模型形式。所以这也是一种便利,但拥有它是件好事:模型验证本质上是通往数据库的最后一扇门,应该得到妥善处理。

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

尽可能遵守 DRY 原则:

  1. 使用通用验证器的 django 方法。因此,即使您在多个地方进行验证,您也使用相同的验证。如果此验证发生变化,它会随处发生变化,请参阅 https://docs.djangoproject.com/en/1.9/ref/validators/

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

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

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

关于python - 在 Django 多边项目中构建数据验证的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35338324/

相关文章:

python - 使用 numpy 仅加载符合特定条件的行

python - 获取最小 MSE python 的路径

python - KeyError : u"Migration rango. 0002_auto_20150905_0345 依赖引用不存在的父节点

php - 如何在 PHP 中通过 cURL 发送 XML 和其他 post 参数

ruby - 您如何访问 VCR 盒式磁带中的数据进行测试?

python - 使用 BeautifulSoup 从未知数量的页面中抓取数据

PYTHON:访问字典中列表列表的元素

django - 在 django-react-redux 中 PUT 文件请求

python - Nginx 不为 Django 提供静态文件

azure - 如何使用 Postman 获取适用于 Anki 的 Azure TTS API