我想在django
上自动运行manage.py createsuperuser
,但它看起来没有办法设置默认密码。
我怎么才能得到这个呢?它必须独立于django数据库。
发布于 2019-12-24 18:41:11
从Django3.0开始,您可以使用默认的createsuperuser --noinput
命令,并将所有必需字段(包括密码)设置为环境变量DJANGO_SUPERUSER_PASSWORD
、DJANGO_SUPERUSER_USERNAME
、DJANGO_SUPERUSER_EMAIL
。--noinput
标志是必需的。
这来自原始文档:https://docs.djangoproject.com/en/3.0/ref/django-admin/#django-admin-createsuperuser
这是将createsuperuser
添加到脚本和管道中的最方便的方法。
发布于 2017-02-28 00:59:53
我自己也在寻找答案。我决定创建一个Django命令来扩展基本的createsuperuser
命令(GitHub):
from django.contrib.auth.management.commands import createsuperuser
from django.core.management import CommandError
class Command(createsuperuser.Command):
help = 'Crate a superuser, and allow password to be provided'
def add_arguments(self, parser):
super(Command, self).add_arguments(parser)
parser.add_argument(
'--password', dest='password', default=None,
help='Specifies the password for the superuser.',
)
def handle(self, *args, **options):
password = options.get('password')
username = options.get('username')
database = options.get('database')
if password and not username:
raise CommandError("--username is required if specifying --password")
super(Command, self).handle(*args, **options)
if password:
user = self.UserModel._default_manager.db_manager(database).get(username=username)
user.set_password(password)
user.save()
示例用法:
./manage.py createsuperuser2 --username test1 --password 123321 --noinput --email 'blank@email.com'
这样做的优点是仍然支持默认命令的使用,同时还允许以非交互式的方式指定密码。
发布于 2011-06-06 01:13:17
您可以编写一个简单的python脚本来处理超级用户创建的自动化。User
模型只是一个普通的Django模型,所以您可以按照正常的流程编写一个独立的Django脚本。例如:
import django
django.setup()
from django.contrib.auth.models import User
u = User(username='unique_fellow')
u.set_password('a_very_cryptic_password')
u.is_superuser = True
u.is_staff = True
u.save()
您还可以向createsuperuser
传递一些选项,即--noinput
和--username
,这将允许您自动创建新的超级用户,但在您为他们设置密码之前,他们将无法登录。
https://stackoverflow.com/questions/6244382
复制相似问题