Каковы типичные сценарии использования сигналов Django перед сохранением, после сохранения, перед удалением, после удаления? - PullRequest
0 голосов
/ 12 ноября 2018

Не могу найти много в документации здесь относительно вариантов использования.Однако я предполагаю что-то вроде этого:

  • Предварительное сохранение: например, для вычисляемых полей мы можем рассчитать возраст по дате рождения и сохранить его в базе данных.
  • После сохранения: используется для операций, связанных с другими объектами в базе данных, например, для обновления обзора может потребоваться пересчет среднего рейтинга фильма.
  • Предварительное удаление: Честно,без понятия.
  • Post-Delete: вероятно, аналогичен post-save, в том смысле, что влияет на другие модели.

Каковы наиболее распространенные варианты использования этих сигналов в целом?Спасибо.

1 Ответ

0 голосов
/ 13 ноября 2018

Очень распространенное использование для pre_save - это убивание заголовков, например на книги, статьи или продукты. Это также одна из причин, по которой всегда лучше сохранять отдельный идентификатор для включения в URL-адреса и т. Д., А не полагаться исключительно на слагов, иначе вы либо не сможете изменить слагов, либо вам придется обойти тот факт, что постоянные страницы могут не иметь постоянные URL-адреса или должны поддерживать устаревшие URL-адреса / перенаправления.

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

pre_delete может использоваться в качестве проверки работоспособности, если у вас есть объекты, которые каким-то образом используются совместно и не будут восприняты более строгими on_delete аргументами . Например, если учитель должен иметь возможность удалять объект ученика только в том случае, если у этого объекта нет связанных записей посещаемости, это может быть одно место для принудительного применения этого.

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

Когда вы получаете сигналы, я бы сказал, что вы слегка выходите из простой инфраструктуры CRUD, которая, вероятно, является наиболее распространенным вариантом использования Django. Поэтому трудно указать на «наиболее распространенные варианты использования», поскольку сигналы становятся более полезными, поскольку ваш проект становится более специализированным.

Они удобны, когда они вам нужны, но лично я использую их только несколько раз в год; это не то, что я бы предложил прыгнуть в качестве первого варианта. Многие или большинство вещей, которые вам нужно сделать с Django, можно сделать проще и удобнее, например, с помощью переопределенного метода save(...).

...