如果我通过 git 部署了 Django 应用程序,如何创建超级用户?

Posted

技术标签:

【中文标题】如果我通过 git 部署了 Django 应用程序,如何创建超级用户?【英文标题】:How do I create a superuser if I have deployed Django app via git? 【发布时间】:2021-07-07 20:19:36 【问题描述】:

所以我在根 Django 项目的 settings.py 中有一个正在开发的 SQLite 数据库。

settings.py 如下(关于数据库):

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    


db_from_env = dj_database_url.config(conn_max_age=600)
DATABASES['default'].update(db_from_env)

但是,如您所见,我的应用已在 heroku 上启动并运行,其中的数据位于 PostgreSQL 数据库中。

我将此应用程序部署到生产的方法是 git,我有点喜欢只推送到 github 存储库然后单击 heroku 上的部署的想法。

但是,我对如何管理数据库中的这种差异感到很困惑。如果我使用 heroku-cli,似乎有很多命令可以处理数据库,但由于我只是使用 git 我真的没有想法如何去做。 这是我想知道如何通过 git 执行的等效命令列表:

$ heroku run python manage.py createsuperuser
$ heroku run python manage.py migrate

我已经尝试在开发中执行这些操作,迁移到那里然后推送到 github,但显然这只更改了 SQLite 数据库,对生产 postgresql 数据库没有任何作用。知道我应该怎么做吗?

【问题讨论】:

您可以通过 ssh 进入您的 heroku 环境并在那里运行 createsuperuser 命令 - 您还可以编写一个简单的脚本,如果超级用户不存在,则在部署时创建一个超级用户,并在后续部署时将其删除 - 我同意应该有更简单的方法来做到这一点 >您还可以编写一个简单的脚本,如果一个超级用户不存在,则在部署时创建一个超级用户,并在随后的部署中将其删除 - -----您能告诉我如何做到这一点吗?另外,谢谢你的回答 这不是 Git 的事情:Git 只是管理提交。你的数据库在 Git 之外(并且有充分的理由;它应该保持这种状态)。 【参考方案1】:

你可以创建一个自定义的 Django manage.py 命令 (https://www.google.com/url?sa=t&source=web&rct=j&url=https://medium.com/swlh/creating-custom-manage-py-commands-with-django-733ec7509b2&ved=2ahUKEwiQ9eeHvfnvAhVeAp0JHRx0CWEQFjACegQIAxAF&usg=AOvVaw2_Lk0kE2U0khALAxjb0hQ9)

如果超级用户不存在,则创建一个超级用户。然后,在您的 Procfile 中,您可以设置如下发布命令:

release: python manage.py <su_command>

【讨论】:

这可能比我的回答更好。 谢谢你:),谢谢你和丹尼尔。虽然这是一个非常好的答案,但我已经将部署从 github 更改为 herokucli,现在我可以通过 cmd 更优雅地做事。【参考方案2】:

将其放在您的 .py 文件之一中:

if not User.objects.filter(is_superuser=True).first():
    user = User.objects.create(
        username = 'admin',
        email = 'admin@mywebsite.com',
        is_superuser = True,
        ...
    )
    user.set_password('some password')
    user.save()

然后在第一次部署后将其删除 - 不要忘记更改密码!

【讨论】:

以上是关于如果我通过 git 部署了 Django 应用程序,如何创建超级用户?的主要内容,如果未能解决你的问题,请参考以下文章

Django Heroku 应用程序移至新计算机 - git push heroku master 上的错误

在 CPanel 上部署 django [关闭]

部署(Django )

git webhook自动部署服务端代码django python docker等

Nginx+gunicorn+Django 服务器部署

在 Elastic Beanstalk 上部署 Django 项目时关于 git 存储库位置的问题