Куда поместить код запуска Django?

Я хотел бы выполнить эти строки кода на запуске сервера (и разработка и производство):

from django.core import management
management.call_command('syncdb', interactive=False)

Вставление его settings.py не работает, поскольку это требует, чтобы настройки уже были загружены.

Помещение их в представлении и доступ к тому представлению внешне не работают также, поскольку существует некоторое промежуточное программное обеспечение, которое использует базу данных, и они приведут к сбою и не позволять мне получить доступ к представлению.

Помещение их в промежуточном программном обеспечении работало бы, но это назвать каждый раз, когда к моему приложению получают доступ. Возможное решение могло бы состоять в том, чтобы создать промежуточное программное обеспечение, которое делает все задание и затем удаляет себя из MIDDLEWARE_CLASSES таким образом, это больше не называют. Я могу сделать это без слишком большого исправления обезьяны?

50
задан Attila O. 6 May 2010 в 02:18
поделиться

3 ответа

Напишите промежуточное ПО, которое делает это в __ init __ , а затем поднимет django.core.exceptions.MiddlewareNotUsed из __ init __ , django удалит его для всех запросов :). __ init __ , кстати, вызывается при запуске, а не при первом запросе, поэтому он не заблокирует вашего первого пользователя.

Говорят о добавлении сигнала запуска, но это скоро не будет доступно (основная проблема, например, заключается в том, когда этот сигнал должен быть отправлен)

Связанный билет: https: //code.djangoproject .com / ticket / 13024

Обновление: Django 1.7 включает эту поддержку. ( Документация , ссылка на которую есть в билете)

55
ответ дан 7 November 2019 в 11:05
поделиться

Если вы используете mod_wsgi, вы можете поместить его в приложение wsgi start

1
ответ дан 7 November 2019 в 11:05
поделиться

Если вы использовали Apache / mod_wsgi для обоих, используйте файл сценария WSGI, описанный в:

http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use- with.html

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

Таким образом:

import sys

sys.path.insert(0, '/usr/local/django/mysite')

import settings

import django.core.management
django.core.management.setup_environ(settings)
utility = django.core.management.ManagementUtility()
command = utility.fetch_command('runserver')

command.validate()

import django.conf
import django.utils

django.utils.translation.activate(django.conf.settings.LANGUAGE_CODE)

# Your line here.
django.core.management.call_command('syncdb', interactive=False)

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()
4
ответ дан 7 November 2019 в 11:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: