как многоразовые приложения django могут инициализировать себя?

Я создаю приложение django в виде пакета python, почти похожего на django-tinymce
Интересный момент в django-tinymce заключается в том, что каждый раз, когда я перезапускаю свой веб-сервер, например, я запускаю:

python manage.py runserver

каким-то образом автоматически файл settings.py внутри django-tinymce начать работать.
как это возможно ?
Я просто добавляю tinymce в INSTALLED_APPS и ничего больше, кроме кода внутри python2.7/site-packages/tinymce/settings.py начинает работать и выполняет несколько операций инициализации каждый раз, когда я перезапускаю свой веб-сервер или запускаю любой manage.py команда.


person Mahdi Zareie    schedule 05.06.2015    source источник
comment
о каких операциях инициализации вы говорите?   -  person Ales Maticic    schedule 05.06.2015
comment
Инициализация @Ales для добавления пути к каталогу в STATICFILES_DIRS   -  person Mahdi Zareie    schedule 05.06.2015


Ответы (2)


Такой код инициализации часто помещается в файл models.py, который запускается Django при запуске или перезапуске. В этом примере приложения это просто вопрос запуска импорта - models.py импортирует виджеты, а виджеты импортируют настройки.

person jasisz    schedule 05.06.2015

Как и в django 1.7, каждое приложение может содержать файл app.py для выполнения любой необходимой инициализации. Представьте, что у нас есть приложение с именем profile. В каталоге вашего приложения создайте файл apps.py следующим образом:

#apps.py 
from django.apps import AppConfig 
class ProfileConfig(AppConfig):
     name = "profiles"
     verbose_name = 'User Profiles'
     def ready(self):
         #do what ever you want

Еще один шаг для завершения этого поведения — указать default_app_config Что должно произойти в init.py вашего приложения:

# profile/__init__.py
default_app_config = 'profile.apps.ProfileConfig'

Это поведение можно использовать во многих случаях, включая: изменение настроек проекта, регистрацию обработчиков сигналов.

Более подробную информацию можно найти в примечаниях к выпуску Django 1.7. и Django docs:Applications

person Mahdi Zareie    schedule 10.06.2015