Я хотел бы выполнить эти строки кода на запуске сервера (и разработка и производство):
from django.core import management
management.call_command('syncdb', interactive=False)
Вставление его settings.py
не работает, поскольку это требует, чтобы настройки уже были загружены.
Помещение их в представлении и доступ к тому представлению внешне не работают также, поскольку существует некоторое промежуточное программное обеспечение, которое использует базу данных, и они приведут к сбою и не позволять мне получить доступ к представлению.
Помещение их в промежуточном программном обеспечении работало бы, но это назвать каждый раз, когда к моему приложению получают доступ. Возможное решение могло бы состоять в том, чтобы создать промежуточное программное обеспечение, которое делает все задание и затем удаляет себя из MIDDLEWARE_CLASSES
таким образом, это больше не называют. Я могу сделать это без слишком большого исправления обезьяны?
Напишите промежуточное ПО, которое делает это в __ init __
, а затем поднимет django.core.exceptions.MiddlewareNotUsed
из __ init __
, django удалит его для всех запросов :). __ init __
, кстати, вызывается при запуске, а не при первом запросе, поэтому он не заблокирует вашего первого пользователя.
Говорят о добавлении сигнала запуска, но это скоро не будет доступно (основная проблема, например, заключается в том, когда этот сигнал должен быть отправлен)
Связанный билет: https: //code.djangoproject .com / ticket / 13024
Обновление: Django 1.7 включает эту поддержку. ( Документация , ссылка на которую есть в билете)
Если вы используете mod_wsgi, вы можете поместить его в приложение wsgi start
Если вы использовали 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()