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

zer*_*lus 97 django

什么是完全卸载Django应用程序的过程,完成数据库删除?

Gab*_*ley 139

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

  2. 要从项目中删除应用程序,您只需将其从INSTALLED_APPS项目中删除即可settings.py.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
        c.delete()
Run Code Online (Sandbox Code Playgroud)

  • 在Django 1.7上,如果你使用迁移,第1步将是```./manage.py migrate my_app_name zero```.它也会自动执行SQL. (24认同)
  • 在Django 1.9中删除了`sqlclear`,所以这个答案只适用于以前的版本.请参阅:https://docs.djangoproject.com/en/1.10/releases/1.9/#features-removed-in-1-9 (11认同)
  • 优秀的答案,只是我做的一个补充:pip uninstall package-name是你的朋友,比在你的PYTHONPATH周围拖网好多了. (5认同)
  • 如果要删除的应用程序具有迁移(其他应用程序的迁移所依赖的迁移),则迁移系统会在看到这些依赖迁移不再存在时崩溃.如果要删除的应用程序是另一个应用程序的迁移历史记录中的依赖项,请在使用上述答案时小心. (5认同)
  • 为了完整起见,您通常需要从项目的 `urls.py` 中删除对 `include("appname.urls")` 的引用 (4认同)
  • 我使用的是 Django 2.2,您可以在第 5 步中使用“python manage.py remove_stale_contenttypes” (2认同)

Vad*_*dim 15

  1. settings.pyINSTALLED_APPS不必要的应用程序行中注释掉
  2. 删除所有文件夹__pycache__migrate项目
  3. 删除不必要的模型 models.py
  4. 删除所有导入链接views.py,admin.py结束等.
  5. 删除urls.py你不必要的应用程序中的所有链接
  6. 在数据库中删除与应用程序关联的不必要的表(我使用帮助程序"Valentina Studio")
  7. 删除应用程序的文件夹
  8. 在命令行中执行:python manage.py migratepython manage.py syncdb


gue*_*tli 8

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

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

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

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

执行这个命令:

python manage.py makemigrations -n drop_all_tables my_app_to_remove
Run Code Online (Sandbox Code Playgroud)

该目录现在看起来像这样:

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
Run Code Online (Sandbox Code Playgroud)

my_app_to_remove在文件“settings.py”中。

第 2 步:部署更改

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

第 3 步:从 settings.py 中删除“my_app_to_remove”

现在从 settings.py 中删除“my_app_to_remove”并再次部署。