我想自动运行manage.py createsuperuser,django但它接缝无法设置默认密码.
我怎么能得到这个?它必须独立于django数据库.
Tk4*_*421 131
如果直接引用User,则代码将无法在AUTH_USER_MODEL设置已更改为其他用户模型的项目中使用.创建用户的更通用方法是:
echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin@myproject.com', 'password')" | python manage.py shell
Run Code Online (Sandbox Code Playgroud)
原始答案
这里有一个简单版本的脚本来创建超级用户:
echo "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'pass')" | python manage.py shell
Run Code Online (Sandbox Code Playgroud)
Ale*_*mov 101
由于Django的3.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到脚本和管道的最方便的方法。
Ada*_*ock 37
我自己正在寻找答案.我决定创建一个扩展基本createsuperuser命令(GitHub)的Django命令:
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()
Run Code Online (Sandbox Code Playgroud)
使用示例:
./manage.py createsuperuser2 --username test1 --password 123321 --noinput --email 'blank@email.com'
Run Code Online (Sandbox Code Playgroud)
这样做的优点是仍支持默认命令使用,同时还允许非交互式使用来指定密码.
yve*_*ess 33
我使用'./manage.py shell -c':
./manage.py shell -c "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'adminpass')"
Run Code Online (Sandbox Code Playgroud)
这不会使用额外的回声,这样做的好处是可以将它传递给docker容器执行.没有必要使用sh -c"......"让你引用逃脱的地狱.
请记住,首先是用户名,而不是电子邮件.
Raf*_*den 18
DJANGO_SUPERUSER_USERNAME=testuser \
DJANGO_SUPERUSER_PASSWORD=testpass \
python manage.py createsuperuser --noinput
Run Code Online (Sandbox Code Playgroud)
zee*_*kay 13
您可以编写一个简单的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()
Run Code Online (Sandbox Code Playgroud)
您也可以通过createsuperuser几个选项,即--noinput和--username,这将让你自动创建新的超级用户,但他们将无法登录,直到你为他们设置密码.
Hen*_*k F 11
我建议运行一个Data Migration,这样在将迁移应用于项目时,将创建一个超级用户作为迁移的一部分。可以将用户名和密码设置为环境变量。在容器中运行应用程序时,这也很有用(请参见此线程作为示例)
然后,您的数据迁移将如下所示:
import os
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('<your_app>', '<previous_migration>'),
] # can also be emtpy if it's your first migration
def generate_superuser(apps, schema_editor):
from django.contrib.auth.models import User
DJANGO_DB_NAME = os.environ.get('DJANGO_DB_NAME', "default")
DJANGO_SU_NAME = os.environ.get('DJANGO_SU_NAME')
DJANGO_SU_EMAIL = os.environ.get('DJANGO_SU_EMAIL')
DJANGO_SU_PASSWORD = os.environ.get('DJANGO_SU_PASSWORD')
superuser = User.objects.create_superuser(
username=DJANGO_SU_NAME,
email=DJANGO_SU_EMAIL,
password=DJANGO_SU_PASSWORD)
superuser.save()
operations = [
migrations.RunPython(generate_superuser),
]
Run Code Online (Sandbox Code Playgroud)
希望有帮助!
目前投票最多的回答:
改进版将是:
USER="admin"
PASS="super_password"
MAIL="admin@mail.com"
script="
from django.contrib.auth.models import User;
username = '$USER';
password = '$PASS';
email = '$MAIL';
if User.objects.filter(username=username).count()==0:
User.objects.create_superuser(username, email, password);
print('Superuser created.');
else:
print('Superuser creation skipped.');
"
printf "$script" | python manage.py shell
Run Code Online (Sandbox Code Playgroud)
小智 6
我这样解决了这个问题。
wsgi.py 文件始终在 django 项目启动时运行。因此,如果不存在,我在这里运行创建超级用户命令。
import os
from django.contrib.auth.models import User
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', {settings_file})
application = get_wsgi_application()
users = User.objects.all()
if not users:
User.objects.create_superuser(username="username", email="user@example.com", password="password", is_active=True, is_staff=True)
Run Code Online (Sandbox Code Playgroud)
可以在这里添加一个功能。例如; 如果此“user1”不存在,请添加“user1”。
小智 5
甲溶液基于亚当诺克的做法以上可作为Python包现在。它需要三个步骤:
安装: pip install django-createsuperuserwithpassword
启用: INSTALLED_APPS += ("django_createsuperuserwithpassword", )
申请:
python manage.py createsuperuserwithpassword \
--username admin \
--password admin \
--email admin@example.org \
--preserve
Run Code Online (Sandbox Code Playgroud)就是这样。
| 归档时间: |
|
| 查看次数: |
41444 次 |
| 最近记录: |