Heroku app.json 设置默认的 django 管理员密码

Heroku app.json set default django admin password

我正在尝试添加一个 depoly to heroku button,我遵循了他们的示例,并最终为我的 django 应用程序 app.json

{
  "name": "foo",
  "description": "foo website",
  "repository": "https://github.com/foo/bar",
  "keywords": ["python", "django", "foobar"],
  "env": {
    "DJANGO_SECRET_KEY": {
      "description": "A randomly generated secret to secure your Django installation",
      "generator": "secret"
    }
  },
  "scripts": {
    "postdeploy": "sh -c 'python manage.py syncdb --noinput; python manage.py migrate --noinput'"
  }
}

执行 syncdb 将创建 auth 表等,但我需要的是允许想要部署应用程序的用户指定默认的管理员用户名和密码。我意识到 heroku run python manage.py syncdb 会提示用户是否要创建超级用户,但这并不是我所需要的。当用户单击按钮时,我需要从 Heroku 的仪表板对其进行配置。我希望这允许非技术人员仍然能够部署应用程序而无需通过终端等。有什么办法吗?

经过一些研究,我设法做了我想做的事,并认为我会分享它。我能够使用 django-extensions 做到这一点。我做了一个python脚本

# create_admin.py
import os
if "ADMIN_USER" in os.environ and "ADMIN_PASSWORD" in os.environ:
    from django.contrib.auth.models import User
    user=User.objects.create_user(os.environ['ADMIN_USER'], password=os.environ['ADMIN_PASSWORD'])
    user.is_superuser=True
    user.is_staff=True
    user.save()

并更改了我的 app.json

的脚本部分
  "scripts": {
    "postdeploy": "sh -c 'python manage.py syncdb --noinput; python manage.py migrate --noinput; python manage.py runscript create_admin'"
  }

确保阅读 django-extensions 文档以获取有关放置脚本的位置以及如何 python manage.py runscript.

的更多信息

重要提示:您可能想在 运行 脚本之后转到 herkou 的配置页面并删除环境变量。