【问题标题】:How to to use django createsuperuser --noinput command如何使用 django createsuperuser --noinput 命令
【发布时间】:2021-02-25 18:15:17
【问题描述】:

我对 django 和 python 还很陌生,我猜这是一个基本问题,但是如果有人能够告诉我我做错了什么和/或如何正确构建非交互式 django createsuperuser 命令(@ 987654321@),我将不胜感激。我想用它在我正在运行的谷歌云运行应用程序上创建一个超级用户,并试图让它在本地工作(在为测试目的而创建的单独应用程序上),但不能 似乎。通过大量的谷歌搜索和浏览 Stackoverflow(可能是因为它太明显了),我几乎没有发现什么。

我有一个基本的 django 应用程序,它在 Ubuntu 上本地运行,并带有 CustomUser 模型。我能够毫无问题地以交互方式创建超级用户。我在我的 settings.py 中定义了 DJANGO_SUPERUSER_PASSWORD/EMAIL/USERNAME,如下所述(我知道我将来需要删除实际值,但只想让它先工作)。

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # Local
    'accounts',
]

AUTH_USER_MODEL = 'accounts.CustomUser'

DJANGO_SUPERUSER_PASSWORD = 'xxx'
DJANGO_SUPERUSER_EMAIL = 'xxx@email.com'
DJANGO_SUPERUSER_USERNAME = 'xxx'

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'config.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'config.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}


# Password validation
# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators



我的 CustomUser 模型如下(但允许交互式创建超级用户):

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    pass

我尝试了各种无效的 createsuperuser 排列。下面比较明智的(我认为):

./manage.py createsuperuser --noinput --username DJANGO_SUPERUSER_USERNAME --email DJANGO_SUPERUSER_EMAIL --password DJANGO_SUPERUSER_PASSWORD
./manage.py createsuperuser --noinput --username USERNAME --email EMAIL --password PASSWORD 
./manage.py createsuperuser --noinput --username DJANGO_SUPERUSER_USERNAME --email DJANGO_SUPERUSER_EMAIL
./manage.py createsuperuser --noinput --username USERNAME --email EMAIL
./manage.py createsuperuser --noinput, username=DJANGO_SUPERUSER_USERNAME, email=DJANGO_SUPERUSER_USERNAME, password=DJANGO_SUPERUSER_PASSWORD

我们将不胜感激地收到任何帮助/指导/方向!

非常感谢

【问题讨论】:

  • 将自定义用户模型添加到您的问题accounts.CustomUser
  • 谢谢。上面添加了自定义用户模型。目前它只是一个占位符。这可能是问题吗?只是困惑为什么我可以交互地创建超级用户?

标签: python django


【解决方案1】:

命令 createsuperuser 无法使用您的 settings.py 来读取您的变量 DJANGO_SUPERUSER_PASSWORD、DJANGO_SUPERUSER_EMAIL 和 DJANGO_SUPERUSER_USERNAME。

该命令只能读取环境变量。 https://docs.djangoproject.com/en/3.2/ref/django-admin/#createsuperuser

您必须先设置不同的环境变量。如果您使用 unix、windows 或在 dockerfile 中使用它,请注意设置变量的方式。

DJANGO_SUPERUSER_EMAIL=xxx@email.com
export DJANGO_SUPERUSER_EMAIL

DJANGO_SUPERUSER_USERNAME=xxx
export DJANGO_SUPERUSER_USERNAME

DJANGO_SUPERUSER_PASSWORD=xxx
export DJANGO_SUPERUSER_PASSWORD

然后你可以使用以下命令:

./manage.py createsuperuser --noinput --username $DJANGO_SUPERUSER_USERNAME --email $DJANGO_SUPERUSER_EMAIL --password $DJANGO_SUPERUSER_PASSWORD

您也必须根据您的操作系统寻找调用环境变量的方式。

【讨论】:

  • 非常感谢。这很有帮助。我最终对变量进行了硬编码,因此将改为使用这种方法。
  • 密码似乎没有被识别为参数。
猜你喜欢
  • 1970-01-01
  • 2011-11-08
  • 2017-05-30
  • 2016-01-17
  • 1970-01-01
  • 2012-07-20
  • 2015-07-29
  • 2023-01-27
  • 2015-03-21
相关资源
最近更新 更多