Django: Jak całkowicie odinstalować aplikację Django?

109

Jaka jest procedura całkowitego odinstalowania aplikacji Django wraz z usunięciem bazy danych?

zer0stimulus
źródło
usuń tę nazwę aplikacji z zainstalowanych aplikacji settings.py, a następnie usuń wszelkie linki do tej aplikacji z głównego pliku urls.py. Następnie możesz bezpiecznie usunąć tę aplikację
Aseem
Jeśli pracujesz nad oprogramowaniem SQLite i nie masz nic przeciwko zresetowaniu bazy danych, czy możesz po prostu usunąć folder aplikacji db.sqlite3i usunąć go z INSTALLED_APPSin settings.py?
Kevin

Odpowiedzi:

150
  1. Django <1.7 ma przydatne polecenie zarządzania, które da ci niezbędny kod SQL do usunięcia wszystkich tabel dla aplikacji. Więcej informacji można znaleźć w dokumentacji sqlclear . Zasadniczo uruchomienie ./manage.py sqlclear my_app_namepowoduje pobranie instrukcji SQL, które należy wykonać, aby pozbyć się wszystkich śladów aplikacji w bazie danych. Nadal musisz skopiować i wkleić (lub potokować) te instrukcje do swojego klienta SQL. W przypadku Django 1.7 i nowszych użyj ./manage.py migrate my_app_name zero(zobacz migrate docs), który automatycznie uruchamia czyszczenie bazy danych.

  2. Aby usunąć aplikację z projektu, wszystko, co musisz zrobić, to usunąć ją z INSTALLED_APPSpliku settings.py. Django nie będzie już ładować aplikacji.

  3. Jeśli nie chcesz, aby pliki aplikacji wisiały w pobliżu, usuń katalog aplikacji z katalogu projektu lub innej lokalizacji na PYTHONPATH, w którym się znajduje.

  4. (opcjonalnie) Jeśli aplikacja przechowywała gdzieś pliki multimedialne, pliki pamięci podręcznej lub inne pliki tymczasowe, możesz je również usunąć. Uważaj także na utrzymujące się dane sesji, które mogą pozostać z aplikacji.

  5. (opcjonalnie) Usunąłbym również wszelkie przestarzałe typy treści.

Tak, tak.

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()
Gabriel Hurley
źródło
5
Doskonała odpowiedź, tylko jeden dodatek, który dodam: pip uninstall nazwa-pakietu to twój przyjaciel, o wiele przyjemniejszy niż przeszukiwanie PYTHONPATH.
DaveJ
25
W Django 1.7, jeśli używasz migracji, krok 1 będzie ./manage.py migrate my_app_name zero. I automatycznie wykona również SQL.
Nathan Do
12
sqlclearzostał usunięty w Django 1.9, więc ta odpowiedź jest dobra tylko dla poprzednich wersji. Zobacz: docs.djangoproject.com/en/1.10/releases/1.9/…
Akhorus
7
Jeśli usuwana aplikacja ma migracje, od których zależą migracje innych aplikacji, system migracji ulegnie awarii, gdy zobaczy, że te zależne migracje już nie istnieją. Zachowaj ostrożność podczas korzystania z powyższej odpowiedzi, jeśli aplikacja, która ma zostać usunięta, jest zależna od historii migracji innej z Twoich aplikacji.
Filip Kilibarda
1
Aby uzyskać kompletność, zazwyczaj musisz usunąć odniesienie do include("appname.urls")z projektuurls.py
nigel222
16
  1. skomentuj settings.pyw INSTALLED_APPSniepotrzebnej linii aplikacji
  2. usuń cały folder __pycache__i migrateprojekt
  3. usuń niepotrzebny model w models.py
  4. usuń wszystkie linki importuviews.py , admin.pyzakończ itp.
  5. usuń wszystkie linki z urls.pyniepotrzebnych aplikacji
  6. w bazie danych usuwam niepotrzebne tabele związane z aplikacją (robię to z pomocą programu "Valentina Studio")
  7. usuń folder aplikacji
  8. w linii poleceń zrób to: python manage.py migrateipython manage.py syncdb
Vadim
źródło
3

Aplikacja django to „zestaw” plików * .py i katalog o nazwie django-app-app. Możesz więc po prostu usunąć cały folder ze wszystkimi plikami * .py

Aby „usunąć” tabele z DB należy użyć DELETE FROM <app-name_table-names>

Ponadto musisz usunąć linie z nazwą aplikacji z setting.py w katalogu głównym

V-Light
źródło
Zakładając, że nie udostępniasz bazy danych innej aplikacji, możesz po prostu upuścić bazę danych nazwaną w settings.py.
joel3000
każda aplikacja ma własną bazę danych - nieźle
V-Light.
3
@ V-Light każda aplikacja ma własną tabelę, a każdy projekt ma własną bazę danych.
Alireza Savand
2

Uwielbiam kroki z tego artykułu - jest to obsługa migracji .

Może trzeba to dostosować w dwóch aktualizacjach kodu - ale wygląda naprawdę bezpiecznie, gdy musisz pracować z wieloma wdrożeniami (takimi jak: etap testowy, wersja BETA i produkcja - w moim przypadku)

dannydedog
źródło
2

W moim kontekście projekty istnieją kilka razy: mam system programistyczny, niektórzy koledzy z zespołu mają system rozwoju, jest system przejściowy dla klienta i system produkcyjny. Oznacza to, że nie chcę ręcznie wykonywać poleceń sql. Chcę, żeby to było zautomatyzowane.

Cel: Usuń aplikację i wszystkie tabele bazy danych.

Krok 1: opróżnij aplikację, ale pozostaw ją zainstalowaną

usuń wszystkie pliki z aplikacji oprócz folderu „migrations”

Wykonaj to polecenie: manage.py makemigrations -n drop_all_tables my_app_to_remove

Katalog wygląda teraz następująco:

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

Pozostaw my_app_to_removew pliku „settings.py”.

Krok 2: Wdróż zmiany

Zaktualizuj wszystkie projekty. Powiedz członkom zespołu, aby zaktualizowali swój projekt i uruchomili migracje.

Krok 3: usuń „my_app_to_remove” z settings.py

Teraz usuń „my_app_to_remove” z settings.py i wdróż ponownie.

guettli
źródło