Инициализация пользовательских объектов в настройках Django - PullRequest
2 голосов
/ 12 сентября 2011

Я новичок в Django и Python.

Я создал файл python в корне приложения под названием services.py.Внутри этого файла у меня есть класс с именем SchedulerService.Я пытаюсь инициализировать экземпляр SchedulerService в модуле настроек, чтобы он был доступен при каждом выполнении представления.В мире Java я использовал бы одноэлементный объект и инициализировал бы его с помощью сервлета auto init или MBean.

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу импортировать любые пользовательские модули в файл settings.py.Например:

settings.py

from theapp.services import SchedulerService

При попытке запустить сервер разработки я получаю следующее сообщение

Error: Can't find the file 'settings.py' in the directory containing 'manage.py'. It appears you've customized things.
You'll have to run django-admin.py, passing it your settings module.
(If the file settings.py does indeed exist, it's causing an ImportError somehow.)

Я получаю ту же ошибку, еслипопробуйте импортировать вид или класс модели в модуль настроек.

Возможно, я делаю это совершенно неправильно и должен реализовать это другим способом.

Любая помощь будет оценена.

Ответы [ 3 ]

1 голос
/ 12 сентября 2011

Это конкретное сообщение характерно для круговой проблемы импорта - theapp.services, вероятно, импортирует settings или импортирует что-то, что в свою очередь импортирует settings, и Python не может разрешить зависимость.

ВыВозможно, можно решить эту проблему, переместив один из импортов в функцию или метод, но я должен сказать, что settings.py - это решительно , а не место для создания экземпляров.Это действительно, действительно не предназначено для этого.

Я надеюсь, что из-за вашей ссылки на «глобальный» объект вы уже рассмотрели проблемы безопасности потоков: не забывайте, процессы Django не создаютсяи уничтожается для каждого запроса, один процесс может обслуживать несколько запросов перед уничтожением, поэтому любые глобальные объекты будут распределены между этими запросами.Если это не то, что вам нужно, вам нужно создать экземпляр объекта внутри самого цикла запроса, возможно, в промежуточном программном обеспечении, и связать его с объектом, который длится только время жизни запроса - другими словами, вероятно, объект requestсам по себе.

В противном случае вы могли бы сделать что-то похожее на приложение администратора и поместить свой вызов экземпляра в urls.py.

1 голос
/ 12 сентября 2011

Содержит ли ваш каталог theapp файл __init__.py?Необходимо быть признанным модулем Python.

0 голосов
/ 03 февраля 2012

Вы можете использовать «глобальную» переменную уровня модуля в том же views.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...