Django: Як повністю видалити додаток Django?


109

Яка процедура повністю видалити додаток Django разом із видаленням бази даних?


видаліть це ім’я з встановлених програм settings.py, а потім видаліть будь-яке посилання на цей додаток із головного файлу urls.py. Тоді і можна безпечно вилучити цю програму
Асім

Якщо ви в розробці з використанням SQLite , і ви не проти перезавантаження бази даних, це добре , щоб просто видалити папку програми та db.sqlite3, і видалити його з INSTALLED_APPSв settings.py?
Кевін

Відповіді:


150
  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 # print(f"deleting {c}") # for Python 3.6+
        c.delete()

5
Відмінна відповідь, лише одне доповнення, яке я зробив би: вилучити ім'я пакета-піп - ваш друг, набагато приємніше, ніж ловитись по вашому PYTHONPATH.
DaveJ

25
На Django 1.7, якщо ви використовуєте міграцію, буде крок 1 ./manage.py migrate my_app_name zero. І він автоматично виконає і SQL.
Натан До

12
sqlclearбуло видалено в Django 1.9, тому ця відповідь хороша лише для попередніх версій. Дивіться: docs.djangoproject.com/en/1.10/releases/1.9/…
Ахорус

7
Якщо додаток, що видаляється, має міграцію, від якої залежать міграції інших програм, система міграції порушиться, коли побачить, що цих залежних міграцій більше не існує. Будьте уважні, використовуючи вищезазначену відповідь, якщо додаток, яке потрібно видалити, є залежністю в історії міграції іншого вашого додатка.
Філіп Кілібарда

1
А для повноти зазвичай вам потрібно буде видалити посилання на include("appname.urls")проектurls.py
nigel222

16
  1. коментувати settings.pyв INSTALLED_APPSнепотрібному рядку програми
  2. видаліть всю папку __pycache__та migrateу своєму проекті
  3. видалити непотрібну модель в models.py
  4. видалити все імпортне посилання views.py, admin.pyзакінчити і т.д.
  5. видаліть усі посилання в urls.pyнепотрібному додатку
  6. в базі даних видаляйте непотрібні таблиці, пов’язані з додатком (я це роблю за допомогою довідкової програми "Valentina Studio")
  7. видалити папку програми
  8. в командному рядку зробіть це: python manage.py migrateіpython manage.py syncdb

3

Додаток django - це набір файлів * .py та каталог із іменем програми django. Таким чином, ви можете просто видалити всю папку з усіма * .py файлами

Щоб "видалити" таблиці з БД, ви повинні використовувати DELETE FROM <app-name_table-names>

Крім того, ви повинні видалити рядки з назвою програми-імені з setu.py у кореневому каталозі


Припустимо, що ви не ділитесь базою даних з іншим додатком, ви можете просто скинути db, названий у settings.py.
joel3000

у кожного додатка є власний db - непогано
V-Light

3
@ V-Light у кожного додатка є своя таблиця, і для кожного проекту є своя база даних.
Аліреза Саванд

2

Я дуже люблю кроки з цієї статті - це включення підтримки міграції .

Можливо, його потрібно адаптувати за допомогою двох оновлень коду - але це виглядає дійсно безпечно, коли вам доведеться працювати з багатьма розгортаннями (як-от: тестовий етап, версія BETA та виробництво - в моєму випадку)


2

У моєму контексті проекти існують декілька разів: у мене є система розвитку, у деяких товаришів є система розвитку, є система постановки для замовника та виробнича система. Це означає, що я не хочу виконувати команди sql вручну. Я хочу, щоб це було автоматизовано.

Мета: Видаліть додаток і всі таблиці баз даних.

Крок 1: спорожніть додаток, але залиште його встановленим

видалити всі файли з програми, крім папки "міграції"

Виконайте цю команду: 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у файлі "settings.py".

Крок 2: Розгорніть зміни

Оновіть усі проекти. Скажіть товаришам по команді оновити проект і розпочати міграцію.

Крок 3: видаліть "my_app_to_remove" з settings.py

Тепер видаліть "my_app_to_remove" з settings.py і знову розгорніть.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.