Автоматически создайте администраторского пользователя при выполнении./manage.py Django syncdb

Вот мое взятие.

  1. , Хотя происходя из точки зрения Java, я на самом деле предпочитаю REST. Конверт SOAP с несколькими пространствами имен и его сложной структурой является отвращением. Это пытается решить главным образом мнимые проблемы, и ничего не решает эффективно. Только вещь о SOAP, который я нашел полезными, состоит в том, что он имеет стандарты для авторизации и ошибок. С другой стороны, оба могли быть решены намного легче включением четырех стандартных атрибутов в корневом элементе XML - имя пользователя, пароль, errorCode, errorDescription.

  2. Хорошее описание API и документация - действительно все, что имеет значение. Различие между REST и SOAP в зрелой платформе находится главным образом в нескольких строках конфигурации.

  3. Для SOAP, отправьте хеш как часть безопасности SOAP; для REST мне нравится упаковывать все в полезной нагрузке и избегать HTTP-заголовков для аутентификации. У меня есть только субъективные причины, хотя, так как я должен был бороться с платформами, которые легко не представляют HTTP-заголовков.

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

    Что касается того, сколько времени Вы поддерживаете старую версию протокола... идеально, пока у Вас есть клиенты, которые используют его. Это - больше бизнеса, чем техническое решение. Необходимо поддерживать по крайней мере одну предыдущую версию протокола. Это обычно находится в Вашем интересе продвинуть клиенты к новой версии понижать затраты на поддержку прежней версии; с клиентской стороны новая версия должна означать новые возможности, лучший протокол и своего рода дополнительный бизнес-стимул (если одни только новые возможности недостаточно).

81
задан Tadeck 10 April 2012 в 20:09
поделиться

6 ответов

Я знаю на вопрос уже был дан ответ, но ...

Намного более простой подход - выгрузить данные модуля аутентификации в файл json после создания суперпользователя:

 ./manage.py dumpdata --indent=2 auth > initial_data.json

Вы также можете выгрузить данные сеансов:

./manage.py dumpdata --indent=2 sessions

Вы можете затем добавьте информацию о сеансе в дамп модуля аутентификации (и, возможно, увеличьте expire_date, чтобы он не истек ... никогда ;-).

С этого момента вы можете использовать

/manage.py syncdb --noinput

для загрузки суперпользователя и его сеанса при создании базы данных без интерактивного запроса о суперпользователе.

80
ответ дан 24 November 2019 в 09:30
поделиться

Мое решение состояло в том, чтобы просто не удалять эти таблицы аутентификации при стирании моей базы данных.

1
ответ дан 24 November 2019 в 09:30
поделиться

Взгляните на команду управления dumpdata . Например:

python manage.py dumpdata > initial_data.json

Если этот файл, называемый прибором, имеет имя initial_data (.xml или .json), то команда syncdb выберет его и заполнит ваши таблицы соответствующим образом. . Он по-прежнему будет спрашивать вас, хотите ли вы создать пользователя, но я считаю, что вы можете спокойно ответить «нет»,

2
ответ дан 24 November 2019 в 09:30
поделиться

Вместо удаления всей базы данных просто удалите таблицы своего приложения перед запуском syncdb

Это выполнит это за вас в одной строке (для каждого приложения):

python manage.py sqlclear appname | python manage.py dbshell

Первая команда просмотрит ваше приложение и сгенерирует требуемый SQL для удаления таблиц. Этот вывод затем передается в dbshell для его выполнения.

После этого запустите вашу syncdb, чтобы воссоздать таблицы:

python manage.py syncdb
49
ответ дан 24 November 2019 в 09:30
поделиться

Если вы хотите, чтобы у вас была возможность - как и я - действительно начать со свежей базой данных, не задавая этот вопрос суперпользователя, то вы можете просто отменить регистрацию обработчика сигнала, который задает этот вопрос. Просмотрите самую нижнюю часть файла:

django/contrib/auth/management/__init__.py

, чтобы увидеть, как выполняется регистрация функции суперпользователя. Я обнаружил, что могу отменить эту регистрацию и никогда не получить вопрос во время "syncdb", если я поместил этот код в свой "models.py":

from django.db.models import signals
from django.contrib.auth.management import create_superuser
from django.contrib.auth import models as auth_app

# Prevent interactive question about wanting a superuser created.  (This
# code has to go in this otherwise empty "models" module so that it gets
# processed by the "syncdb" command during database creation.)

signals.post_syncdb.disconnect(
    create_superuser,
    sender=auth_app,
    dispatch_uid = "django.contrib.auth.management.create_superuser")

Я не уверен, как гарантировать запуск этого кода после кода Django, выполняющего регистрацию. Я думал, что это будет зависеть от того, будет ли ваше приложение или приложение django.contrib.auth упомянуто первым в INSTALLED_APPS, но, похоже, это работает для меня независимо от того, в каком порядке я их разместил. Может быть, они сделаны в алфавитном порядке, а я ' м повезло, что имя моего приложения начинается с буквы после "d"? Или Django достаточно умен, чтобы сначала делать свои собственные вещи, а затем мои на случай, если я захочу испортить их настройки? Дай мне знать, если узнаешь. : -)

16
ответ дан 24 November 2019 в 09:30
поделиться

Я использую sqlite в качестве базы данных для разработчиков. После изменения классов модели просто удалите соответствующие таблицы с помощью sqlite manager (плагин firefox, в любом случае открытый для проверки данных) и запустите manage.py syncdb , чтобы воссоздать то, что отсутствует. ]

0
ответ дан 24 November 2019 в 09:30
поделиться
Другие вопросы по тегам:

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