如何彻底卸载Django应用?

162 投票
8 回答
147393 浏览
提问于 2025-04-16 01:48

彻底卸载一个Django应用程序的步骤是什么,包括删除数据库?

8 个回答

20
  1. settings.py 文件中,把不需要的应用程序的那一行注释掉,放在 INSTALLED_APPS 里。
  2. 删除项目中的所有 __pycache__ 文件夹和 migrate 文件夹。
  3. models.py 文件中,删除不需要的模型。
  4. views.pyadmin.py 等文件中,删除所有的 import 引用。
  5. urls.py 文件中,删除不需要的应用程序的所有链接。
  6. 在数据库中,删除与该应用程序相关的不必要的表(我用“Valentina Studio”这个程序来做的)。
  7. 删除应用程序的文件夹。
  8. 在命令行中执行: python manage.py migratepython manage.py syncdb
27

在我的情况下,这个项目存在多个版本:我有一个开发系统,一些队友也有他们的开发系统,还有一个给客户的测试系统和一个生产系统。这意味着我不想手动执行 SQL 命令,我希望这个过程能够自动化。

目标:删除这个应用和所有相关的数据库表。

第一步:清空应用,但保持它已安装

删除应用中的所有文件,除了“migrations”文件夹。

执行这个命令:

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

在文件“settings.py”中保留 my_app_to_remove

第二步:部署更改

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

第三步:从 settings.py 中移除 "my_app_to_remove"

现在从 settings.py 中移除 "my_app_to_remove",然后再次进行部署。

210
  1. Django 1.7 之前有一个很方便的管理命令,可以帮你生成删除某个应用所有数据库表的SQL语句。你可以查看 sqlclear 文档 了解更多信息。简单来说,运行 ./manage.py sqlclear my_app_name 就会得到一系列SQL语句,这些语句可以用来清除数据库中与这个应用相关的所有内容。不过,你还需要把这些语句复制粘贴到你的SQL客户端中执行。对于Django 1.7及以上版本,可以使用 ./manage.py migrate my_app_name zero(具体可以参考 migrate 文档),这样就能自动清理数据库了。

  2. 要从你的项目中移除这个应用,只需在项目的 settings.py 文件中把它从 INSTALLED_APPS 列表中删除。这样Django就不会再加载这个应用了。

  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()

撰写回答