Django: 如何完全卸载一个 Django 应用程序?

完全卸载 Django 应用程序并删除数据库的步骤是什么?

128235 次浏览

Django 应用程序是 * 的“集合”。Py 文件和一个具有 django-app-name 的目录。因此,您可以简单地删除整个文件夹与所有 * 。Py 文件

要从 DB 中“移除”表,应该使用 DELETE FROM <app-name_table-names>

此外,还必须删除根目录中 seting.py 中包含 app-name 的行

  1. Django < 1.7有一个方便的管理命令,它将为您提供必要的 SQL 来删除应用程序的所有表。有关更多信息,请参见 清楚的文件。基本上,运行 ./manage.py sqlclear my_app_name可以得到应该执行的 SQL 语句,以消除数据库中应用程序的所有跟踪。您仍然需要将这些语句复制并粘贴(或管道)到 SQL 客户机中。对于 Django 1.7及以上版本,请使用 ./manage.py migrate my_app_name zero(参见 迁徙文档) ,它会自动运行数据库清理。

  2. 要从您的项目中删除应用程序,所有您需要做的就是从您的项目的 settings.py中的 INSTALLED_APPS中删除它。姜戈将不再载入应用程序。

  3. 如果您不再希望应用程序的文件被挂起,请从您的项目目录或 PYTHONPATH 上的其他位置删除应用程序目录。

  4. (可选)如果应用程序存储的媒体文件,缓存文件,或其他临时文件的地方,你可能想删除这些以及。同时也要小心那些可能从应用程序中遗留下来的延迟会话数据。

  5. (可选)我也会删除任何陈旧的内容类型。

像这样。

from django.contrib.contenttypes.models import ContentType
for c in ContentType.objects.all():
if not c.model_class():
print "deleting %s"%c # print(f"deleting {c}") # for Python 3.6+
c.delete()
  1. INSTALLED_APPS不必要的应用程序行中对 settings.py进行注释
  2. 删除项目中的所有文件夹 __pycache__migrate
  3. 删除 models.py中不必要的模型
  4. 删除 views.pyadmin.py端等所有的 进口链接。
  5. 删除 urls.py中不必要的应用程序的所有链接
  6. 在数据库中删除与应用程序相关的不必要的表(我使用帮助程序“ Valentina Studio”)
  7. 删除应用程序的文件夹
  8. 在命令行中执行: python manage.py migratepython manage.py syncdb

在我的上下文中,这些项目存在好几次: 我有一个开发系统,一些团队成员有一个开发系统,有一个用于客户的分段系统和一个生产系统。这意味着我不想手动执行 sql 命令。我希望是自动化的。

目标: 删除应用程序和所有数据库表。

步骤1: 清空应用程序,但保持其安装状态

从应用程序中删除所有文件,除了文件夹“迁移”

执行以下命令:

python manage.py makemigrations -n drop_all_tables my_app_to_remove

目录现在看起来是这样的:

my_app_to_remove/
my_app_to_remove/__init__.py
my_app_to_remove/migrations
my_app_to_remove/migrations/0001_initial.py
my_app_to_remove/migrations/....
my_app_to_remove/migrations/0030_drop_all_tables.py
my_app_to_remove/migrations/__init__.py

my_app_to_remove保留在文件“ setings.py”中。

步骤2: 部署更改

更新所有项目。告诉团队成员更新他们的项目并运行迁移。

步骤3: 从 setings.py 中删除“ my _ app _ to _ move”

现在从 setings.py 中删除“ my _ app _ to _ remove”,然后再次部署。

安全删除 Django 应用程序作者: Jordan Haines

要完全删除 Django 应用程序(带有模型) ,请按照下面的步骤操作:

  1. 在其他应用程序中搜索任何 note _ app 导入。最简单的方法是在项目范围内搜索“ from note _ app”。您可能希望从搜索中排除 note _ app 目录。
  2. 评论 note_app.models中的所有模型。如果使用 Django 管理员注册 note _ app 模型,可能还需要从 note_app.admin文件中删除条目。
  3. 在尝试运行 Django 应用程序时查找并解决错误。附言。您可能错过了步骤1中的一些模型导入。
  4. 注意,根据定义 外国钥匙,一对一很多很多字段的方式,可能在步骤1中遗漏了 Note _ app 模型的一些键。在继续之前,需要删除指向其他应用中模型的 note _ app 模型的所有字段,这一点很重要。花一分钟时间确保没有遗漏这些字段; 如果遗漏了,那么删除那些保留的字段并创建迁移,从而从数据库中删除这些字段。
  5. 运行 makemigrations。这将创建一个 note _ app 迁移,删除刚才推荐的所有模型。此迁移还应该从其他应用程序中的模型中删除指向 note _ app 模型的字段。
  6. 进行迁移。在删除应用程序目录之前,必须在所有环境(包括生产环境)中运行迁移。从数据库中删除应用程序模型的迁移将会出现在 note _ app 目录中。如果您过早删除应用程序目录,您将在这些迁移有机会清理您的数据库之前删除它们。
  7. 您可能会收到这样的通知: 已删除模型的内容类型已过时。当被问及是否要删除这些内容类型时,请回答“是”
  8. Git提示: 提交迁移,注意提交,然后创建一个单独的提交,删除 note _ app 目录。当您准备在临时或生产环境中应用您的更改时,签出您注意到的提交,运行迁移,然后签出删除应用程序目录的最新提交。第一次提交在 INSTALLED _ APPS 中仍然应该有 note _ app。
  9. 删除包含 note _ app 的目录。
  10. INSTALLED_APPS设置中删除 note_app

就是这样... 超级简单:)

作为第一步,防止任何应用程序模型的使用并进行部署。这对于滚动部署是必不可少的。检查下面的笔记。

那你有两个选择。

选择一

  1. (手动)运行 python manage.py migrate <app_name> zero。这将恢复应用程序的所有迁移并清理 django_migrations
  2. 删除应用程序(代码,INSTALLED_APPSurls.py等)
  3. 部署(python manage.py migrate)

选择二

  1. 删除应用程序中的所有模型
  2. 展开
  3. 删除应用程序(代码,INSTALLED_APPSurls.py等)
  4. 展开
  5. (手册)清洁 django_migrations

这个答案是在自动滚动部署上下文(例如 Heroku)中思考的。 手动部署意味着通常不能在自动部署中完成。部署基本上是指通常在自动部署中完成的 python manage.py migrate

笔记

  1. 确保删除从其他应用程序导入此应用程序的代码。还有 settings.py中的任何引用(但是把它保存在 INSTALLED_APPS中,这样我们就可以运行迁移了) ,urls.py,等等。
  2. migrate <app_name> zero将根据这些迁移恢复所有迁移。因此,如果您的其他应用程序迁移依赖于这些迁移,请小心。
  3. 如果您不仅有模式迁移,还有数据迁移,那么还要注意级联删除。
  4. 接收其他应用程序中定义的信号的信号接收器可能是滚动部署中的一个问题。

参考文献

  1. Https://docs.djangoproject.com/en/stable/ref/django-admin/#migrate