在Docker容器中创建Django超级用户,无需输入密码

51

我正在使用fabric在Django的Docker容器中尝试创建超级用户。

为了在Django中创建超级用户,我需要在Django交互模式下运行以下命令:

./manage.py createsuperuser

因为我想在织物脚本中运行它,所以我找到 这个 命令可以避免输入密码。

echo "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'pass')" | ./manage.py shell

然后我结合使用 "docker exec" 将其在我的 Django 容器中运行。

docker exec container_django echo "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'pass')" | ./manage.py shell

问题出在Linux管道符号 "|" 上,它将其左侧的所有内容(包括docker exec)传输到其右侧的"./manage.py shell"中。

而这不仅是困难的部分,还需考虑将所有这些杂项放入fabric run中,这意味着它们需要在两端使用引号,这将使整个过程非常丑陋。

fabric run:
run("docker exec container_django {command to create django super user}")

我仍在努力想方设法让垃圾至少能在面料运行时工作,但我不知道该怎么做。


尝试更简单的方法:https://dev59.com/fG0NtIcB2Jgan1znGjV2#74273514 - abdulalim
12个回答

1
创建文件 Makefile
.ONESHELL:
reset-superuser: SHELL := python
reset-superuser:
    import os
    import django
    from django.contrib.auth import get_user_model

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.develop")
    django.setup()

    User = get_user_model()
    user = User.objects.filter(is_superuser=True).first()

    if user:
        user.set_password("admin")
        user.save()
    else:
        user = User.objects.create_superuser(
            username="josuedjh",
            first_name="Josue djh",
            password="admin",
        )

    print(f"Superuser {user.username!r} with password `admin`")

运行命令:

make reset-superuser

0

如果您在容器中运行Django,干净而优雅的方式就是不要将任何额外的自定义代码或命令放入代码库中。相反,使用bash脚本来运行所需的任何配置(例如创建超级用户)。这样,您可以更好地管理和自动化您的配置,并保持代码库的整洁和可重用性跨环境。

将其放入您的docker-compose.yml

command: >
  bash -c '.. 
  && source create_superuser_prod.sh 
  && ..'

将其放入create_superuser_prod.sh文件中。
echo "from django.contrib.auth.models import User; User.objects.create_superuser($PROD_USER,$PROD_USER_EMAIL,$PROD_USER_PASS)" | python manage.py shell 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接