Автоматически запрашивать обновление имени домена сайта по умолчанию при запуске Django ./manage.py syncdb? - PullRequest
3 голосов
/ 24 февраля 2010

Относительно модуля Django Sites и manage.py syncdb

Модуль Auth может запросить имя суперпользователя по умолчанию для сайта администратора во время. \ Manage.py syncdb. Я хотел бы, чтобы подобные вещи происходили с доменным именем сайта по умолчанию. В настоящее время это example.com, жестко запрограммированный, если я не использую веб-сайт администратора для его изменения. Я хочу изменить это во время syncdb.

Ответы [ 2 ]

6 голосов
/ 24 февраля 2010

Я сделал небольшое приложение django, которое можно подключить и играть. Чтобы подключить его:

  1. загрузите его в каталог проекта или туда, где может найти ваш проект.
  2. добавьте в вашем settings.py INSTALLED_APPS "site_default" (имя приложения) в конце или после "django.contrib.sites", от которого оно зависит.
  3. Выполнить manage.py syncdb или manage.py createdefaultsite

Снимок экрана:

(pinax-dev)>manage.py createdefaultsite
Site domain name: mydomain.com
Site display name: My Site!
(pinax-dev)

Поставляется с модульным тестом. Чтобы запустить юнит-тест:

(pinax-dev)>manage.py test site_default

"site_default" - это имя приложения.

Исходный код: http://github.com/peiwei/pinax/raw/master/pinax/apps/site_default.tgz

Ещё скриншот:

(pinax-dev)> manage.py syncdb
Creating table...
You just installed Django's auth system, which means you don't have any superuse
rs defined.
Would you like to create one now? (yes/no): yes
Username: administrator
E-mail address: who@who.com
Password:
Password (again):
Superuser created successfully.

Would you like to change the default site domain name? (yes/no)[default:no]: yes

Site domain name: mydomain.com
Site display name: My Site!
...
Installing index for signup_codes.SignupCode model
Installing index for signup_codes.SignupCodeResult model
4 голосов
/ 24 февраля 2010

Вы можете сделать это самостоятельно:

  1. Создайте команду управления для запроса вашего нового сайта
  2. подключите его к сигналу post_syncdb

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

from django.contrib.sites import models as sites_app
signals.post_syncdb.connect(create_site, sender=sites_app)

При написании функции create_site (обработчик сигнала) вы можете скопировать подход модуля auth почти точно:

def create_site(app, created_models, verbosity, **kwargs):
from django.contrib.sites.models import Site
from django.core.management import call_command
if Site in created_models and kwargs.get('interactive', True):
    msg = "\nYou just installed Django's sites system, which means you don't have " \
            "any sites defined.\nWould you like to create one now? (yes/no): "
    confirm = raw_input(msg)
    while 1:
        if confirm not in ('yes', 'no'):
            confirm = raw_input('Please enter either "yes" or "no": ')
            continue
        if confirm == 'yes':
            call_command("createsite", interactive=True)
        break

Теперь вам просто нужно создать команду управления createsite и все готово. Я удивляюсь, почему этого нет в Django, но я ненавижу example.com.

Поместите все это в маленькое приложение и используйте его для каждого вашего проекта. Бонусные баллы, если вы разместите приложение где-нибудь, например, в коде Google или трекере ошибок Django.

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