Форум сайта python.su
Доброго дня.
Подскажите.
Как и где правильно подключать signals?
Все сигналы у меня лежат в signals.py. Автоматически они не подсоединяются. Я добавил подсоединение в app/__init__.py
Но заметил, что они подсоединяются один раз при активайии сервера(локального).
Спасибо.
Офлайн
Щас читалнул про сигналы https://docs.djangoproject.com/en/1.5/topics/signals/. Не нашел, чтобы там говорилось про место расположения.
Скажу про свой опыт. Когда их делал, делал по примеру. Сигналы все регистрировал в models.py , там они работают, как положено. Когда же захотел вынести их в отдельный файл, то же в signals.py, то работать перестали. Я сделал вывод, что жить им нужно только в models.py =) Делал кстати, расширение обычной модели auth.models.User, сигналами: после_сохранения, перед_удалением редактировал соответствующую модель профиля my_app.models.UserProfile
Отредактировано buddha (Март 2, 2013 14:47:31)
Офлайн
Говорится про место.
https://docs.djangoproject.com/en/dev/topics/signals/#connecting-receiver-functions (чуть пониже)
Where should this code live?Смысл- кладите куда угодно, но убедитесь что регистрируются перед тем как любой сигнал будет послан, поэтому models.py самое то.
You can put signal handling and registration code anywhere you like. However, you’ll need to make sure that the module it’s in gets imported early on so that the signal handling gets registered before any signals need to be sent. This makes your app’s models.py a good place to put registration of signal handlers.
Отредактировано nnmware (Март 2, 2013 15:11:28)
Офлайн
Размыто объяснено. Нет конкретики. Весь вопрос то и заключается в том, как зарегистрировать перед тем, как сигнал будет послан?
Офлайн
Ну регистрируется ведь при импорте, так?
Написано ведь- убедитесь что этот блок импортируется перед тем как сигнал будет послан.
Свои фирменные сигналы можно импортировать например во вьюхах которых их посылают.
А в случае классических pre_save и тп- действительно только в models.py им и место.
Отредактировано nnmware (Март 2, 2013 16:06:58)
Офлайн
Отлично, спасибо!
Офлайн
Спасибо.
Офлайн
Да было б за что.
Я Вас отлично понимаю, сам в свое время долго разбирался пока django-way чучуть не начал понимать.
Очень логично все сделано.
А вот насчет версии про __init__.py ждем подтверждения или опровержения более знающих людей.
Офлайн
Доброго утра.
Подключил сигналы в одном из MiddleWare - работает.
В моделях у меня не рабоатет также. Я выяснил(подтвердил) порядок загрузки.
module/__init__.py
активируется только при явном импорте модуля
import module
То есть если я сделаю
import module.submodule
model.__init__.py не отработает.
Похожая ситуация и с model.py
Если я импортирую модель
from model import Info
model.py - не запукает код, только делает импорт.
Для того, что-бы отработал код в модели нужно сделать
import app.model
Так получается в моей ситуации.
Офлайн
likinВот тут то и порылась собака.
Похожая ситуация и с model.py
Если я импортирую модель
from model import Info
model.py - не запукает код, только делает импорт.
Офлайн