Сохранение/удаление сигналов в целом благоприятны в ситуациях, когда вам необходимо внести изменения, которые не являются полностью конкретными для рассматриваемой модели, или могут применяться к моделям, которые имеют что-то общее или могут быть настроены для использования через моделей.
Общепринятая задача в переопределенном методе save
- автоматизированная генерация пули из некоторого текстового поля в модели. Это пример того, что, если вам нужно было реализовать его для ряда моделей, выиграло бы от использования сигнала pre_save
, где обработчик сигнала мог бы взять имя поля slug и имя поля для генерации пули из , Как только у вас будет что-то подобное, любые расширенные функциональные возможности, которые вы вводите на место, также применимы ко всем моделям - например, глядя на слизню, которую вы собираетесь добавить для типа модели, о которой идет речь, для обеспечения уникальности.
Многоразовые приложения часто используют использование сигналов - если функциональность, которую они предоставляют, может применяться к любой модели, они обычно (если это не неизбежно) не хотят, чтобы пользователям приходилось напрямую изменять свои модели, чтобы извлечь выгоду из Это.
С django-mptt, например, я использовал pre_save
сигнал для управления набором полей, которые описывают структуру дерева для модели, которая собирается быть создана или обновлено и pre_delete
сигнала, чтобы удалить детали структуры дерева для объекта и все его поддерево объектов перед ним, и они удаляются. Из-за использования сигналов пользователям не нужно добавлять или изменять методы save
или delete
на своих моделях, чтобы сделать это управление для них, они просто должны позволить django-mptt знать, какие модели они хотят, чтобы они управляли.
Нет, сигналы блокировки, если вы не нерест потоков явным образом. – muhuk 2011-07-10 04:58:49
@muhuk прав, сигналы блокируют ваши процессы. Если вы хотите избежать блокированных процессов, используйте инструменты, такие как gevent, сельдерей или другие асинхронные инструменты. – pydanny 2011-12-13 21:27:29