我想在django上自动运行manage.py createsuperuser,但是没有办法设置默认密码。

我怎么才能得到这个?它必须独立于django数据库。


当前回答

非常简单,监听post syncdb信号,从配置文件中读取超级用户凭证并应用它。

查看django-finalware和它的前身django-bootup[已弃用]

其他回答

在我的例子中,我们自动使用一些bash, docker, helm,我们有一些问题,转义一些逗号和引号,经过一些尝试/错误后,我们找到了最简单的方法(对我们来说最简单),这个单行命令基于之前共享的文档做到了这一点

DJANGO_SUPERUSER_PASSWORD=12345 DJANGO_SUPERUSER_USERNAME=pacho DJANGO_SUPERUSER_EMAIL=pacho@gmail.com python manage.py createsuperuser --noinput
DJANGO_SUPERUSER_USERNAME=testuser \
DJANGO_SUPERUSER_PASSWORD=testpass \
DJANGO_SUPERUSER_EMAIL="admin@admin.com" \
python manage.py createsuperuser --noinput

createuser命令的文档

从Django 3.0开始,你可以使用默认的createsuperuser——noinput命令,并将所有必需的字段(包括密码)设置为环境变量DJANGO_SUPERUSER_PASSWORD, DJANGO_SUPERUSER_USERNAME, DJANGO_SUPERUSER_EMAIL。——不需要input标志。

这来自最初的文档:https://docs.djangoproject.com/en/3.0/ref/django-admin/#django-admin-createsuperuser

这是将createsuperuser添加到脚本和管道中最方便的方法。

对于那些只想在AWS Elastic Beanstalk上托管django网站的人(即使没有docker),并且被超级用户部分卡住了,在.platform > hooks > postdeploy中创建一个名为01_migration .sh的文件,并输入以下内容:

#!/bin/bash

source /var/app/venv/*/bin/activate && { python migrate.py createsuperuser --noinput; }

然后,您可以将DJANGO_SUPERUSER_PASSWORD, DJANGO_SUPERUSER_USERNAME, DJANGO_SUPERUSER_EMAIL添加到应用程序环境的配置部分。

然后将以下文件添加到.ebextentions > django.config文件夹中

container_commands:
    01_chmod1:
         command: "chmod +x .platform/hooks/postdeploy/01_migrate.sh"

这将以一种安全的方式创建超级用户,使用相同的逻辑,您还可以通过添加到01_migration .sh文件来运行迁移和collectstatic。

用shell_plus就简单多了

echo "User.objects.create_superuser('test@test.com', 'test')" | python manage.py shell_plus

正如其他人提到的,在Django 3.0中,你可以通过环境变量来传递凭证。然而,这种方法更加灵活,因为它允许您执行任何其他更复杂的任务,如删除所有测试用户等。