Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 6, 2015 20:03:55

hound
Зарегистрирован: 2014-10-27
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

Сервис отдельный от Django

Добрый день, есть приложение на Django: модели, приложения, модули со своими функциями (которые используют модели джанго приложения).

Есть потребность в создании отдельного сервиса работать он должен по сути отдельно от сайта на дженго. Сервис этот должен использовать функции из модулей приложения джанги (там будет работа с записями в базе денных).
Для удобства этот сервис планировал разместить в папке с одним из приложений джанго, но запуске этого сервиса вываливается ошибка:

django.core.exceptions.ImproperlyConfigured: Requested setting CACHES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

Если сделать запуск через manage.py, то ошибка пропадает, но это мне кажется слишком избыточным, в частности из-за определения класса class Command(BaseCommand).
Какие варианты можете подсказать и как лучше реализовать подобный сервис в данном случае?
Заранее благодарен за ответ.

Офлайн

#2 Апрель 7, 2015 05:53:50

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Сервис отдельный от Django

Работа всех частей джанго завязана на импорт настроек из settings.py. Если вы посмотрите внутрь wsgi.py, то по сути всё что там есть это

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
то есть мы устанавливаем системную переменную, в которую кладём путь к settings.py, и создаём новый экземпляр wsgi_application. А дальше там происходит куча магии: импортируются приложения, миддлвари, модели, строится весь каркас ОРМ, создаются сигналы и прочее. Без комплекса этих мероприятий джанга и её отдельные части работать не смогут. Когда вы запускаете команду через manage.py вся эта хрень выполняется точно так же, как если бы вы запускали wsgi-приложение. Ваши движения по определению класса Command, не то что не избыточны, это маленькая вершина той работы, которая проходит незаметно для вас. Вы можете попробовать инстанциировать джангу каким-то своим путём, но вы наверняка придёте к тому, что создать кастомную management-команду самый оптимальный вариант.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version