在Heroku的app.json中设置默认Django管理员密码

0 投票
1 回答
728 浏览
提问于 2025-05-10 21:29

我正在尝试添加一个部署到 Heroku 的按钮,我按照他们的例子做,最后为我的 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 命令会创建一些用户认证的表格,但我想要的是让想要部署这个应用的用户能够指定默认的管理员用户名和密码。我知道运行 heroku run python manage.py syncdb 会提示用户是否想创建一个超级用户,但这并不是我真正需要的。我希望能在 Heroku 的仪表盘上配置这些信息,当用户点击按钮时就能设置。我想让非技术人员也能顺利部署这个应用,而不需要通过终端等复杂步骤。有没有办法做到这一点呢?

相关文章:

  • 暂无相关问题
暂无标签

1 个回答

1

经过一些研究,我终于实现了我想要的功能,觉得应该分享一下。我是通过使用 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 来运行它。

重要提示:在运行完脚本后,你可能需要去 heroku 的配置页面,删除环境变量。

撰写回答