2016-02-11 1 views
3

Я знаю, что это широкий вопрос. Но давайте представим, что у вас есть проект Django с API, используемым клиентами мобильных приложений.Рекомендации по архивированию валидации данных в многогранном проекте Django

Есть много мест, где вы можете добавить логику проверки:

  • Модели полей сами
  • Модели, переопределив save() метод
  • Джанго формы и модели формы.
  • API сериализаторы (общие сериализаторы или модели сериализаторы)

Когда architecturing ваш проект, какие правила/элементы помогут вам выбрать, следует ли проверка поставить здесь или там?

ответ

4

Это мнение и стиль вопроса. Я считаю, что эта проверка моделей является абсолютным требованием, последней защитой от ошибок. После того, как будут проверены модели, вы можете продолжить работу с формами, клиентом и API.

Определенная модель проверки, полей или методов модели (или пользовательских менеджеров и т. Д.) - это выбор стиля и того, что работает для конкретного приложения, но сохраняйте проверку моделей. Это одно место, чтобы поймать все это. У вас может быть много форм, много API, но одна точка, где данные поступают в БД.

Одно из преимуществ django заключается в том, что во многих случаях модерация распространяется, например. ModelForms. Таким образом, это также удобство, но это приятно иметь: проверка моделей - это, по сути, последние ворота в БД, и их следует рассматривать должным образом.

Сторона примечания: проверка «полей» на самом деле «проверка базы данных» и «проверка поля django».

Чтобы с СУХОЙ принципе как можно больше:

  1. Используйте Джанго подход родовых валидаторов. Поэтому, даже если вы проверяете несколько мест, вы используете ту же проверку. Если эта валидация изменяется, она меняется везде, см. https://docs.djangoproject.com/en/1.9/ref/validators/

  2. Если возможно, все объекты, обращенные к клиенту, должны вытягивать проверки модели и использовать их или сопоставлять их с правильной проверкой на стороне клиента, аналогично ModelForms.

  3. Если возможно, используйте сообщения об ошибках проверки модели, чтобы создать значимую обратную связь с клиентом.

Но валидации могут повторяться в конце концов, главным образом потому, что валидация имеет (по крайней мере) две роли: очистить данные и обеспечить обратную связь с пользователем. Лучший пример - проверка на стороне клиента. Полезно обеспечить немедленную обратную связь, без обратной связи с сервером, но повторяет проверку на стороне сервера. Подтверждение модели просто гарантирует, что при добавлении дополнительных форм API, опций, если вы забудете реализовать правильную проверку - модель предотвратит ее.

+0

Я полностью согласен с этим. Однако как вы гарантируете, что останетесь СУХОЙ, когда будете иметь дело с проверкой API Serializer? (Я бы хотел, чтобы не писать одинаковые проверки во многих местах: модели, а затем сериализаторы). –

+1

Подумайте об этом аналогично архитектуре django: Модели и формы. Модели обращены к БД, формы обращены к пользовательскому вводу и HTML.Аналогичным образом, вы сталкиваетесь с проверкой БД и проверяете пользователя/клиента. Или понятие «защита в глубину», которая также основана на слоях. Программисты будут делать ошибки в формах, api, webpages, мобильных клиентах. Лучшее место, чтобы поймать эти ошибки, находится в моделях. –

+0

Спасибо! Давайте используем пример с номером телефона, когда пользователь подписывается. Вы бы создали валидатор в поле модели И в Сериализаторе API, чтобы проверить, что номер телефона действителен? –

Смежные вопросы