Django: Bagaimana cara menghapus seluruh aplikasi Django?

109

Bagaimana prosedur untuk mencopot sepenuhnya aplikasi Django, lengkap dengan penghapusan basis data?

zer0stimulus
sumber
hapus nama aplikasi itu dari settings.py aplikasi yang diinstal, lalu hapus tautan apa pun ke aplikasi itu dari file urls.py utama. Maka Anda dapat dengan aman menghapus aplikasi itu
Aseem
Jika Anda sedang dalam pengembangan menggunakan SQLite dan Anda tidak keberatan menyetel ulang database, apakah boleh menghapus folder aplikasi dan db.sqlite3, dan menghapusnya dari INSTALLED_APPSdalam settings.py?
Kevin

Jawaban:

150
  1. Django <1.7 memiliki perintah manajemen yang berguna yang akan memberi Anda SQL yang diperlukan untuk melepaskan semua tabel untuk sebuah aplikasi. Lihat dokumen sqlclear untuk informasi lebih lanjut. Pada dasarnya, menjalankan ./manage.py sqlclear my_app_namemembuat Anda mendapatkan pernyataan SQL yang harus dijalankan untuk menyingkirkan semua jejak aplikasi di DB Anda. Anda masih perlu menyalin dan menempelkan (atau menyalurkan) pernyataan tersebut ke klien SQL Anda. Untuk Django 1.7 dan yang lebih baru, gunakan ./manage.py migrate my_app_name zero(lihat dokumen migrasi ), yang menjalankan pembersihan database secara otomatis.

  2. Untuk menghapus aplikasi dari proyek Anda, yang perlu Anda lakukan adalah menghapusnya dari INSTALLED_APPSdalam proyek Anda settings.py. Django tidak akan lagi memuat aplikasi.

  3. Jika Anda tidak ingin lagi file aplikasi berkeliaran, hapus direktori aplikasi dari direktori proyek Anda atau lokasi lain di PYTHONPATH tempat ia berada.

  4. (opsional) Jika aplikasi menyimpan file media, file cache, atau file sementara lainnya di suatu tempat, Anda mungkin ingin menghapusnya juga. Berhati-hatilah juga dengan data sesi yang tersisa yang mungkin tersisa dari aplikasi.

  5. (opsional) Saya juga akan menghapus semua jenis konten basi.

Seperti itu.

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
sumber
5
Jawaban yang sangat baik, hanya satu tambahan yang akan saya buat: pip uninstall nama paket adalah teman Anda, jauh lebih bagus daripada menjelajahi PYTHONPATH Anda.
DaveJ
25
Pada Django 1.7, jika Anda menggunakan migrasi, langkah 1 akan dilakukan ./manage.py migrate my_app_name zero. Dan secara otomatis akan mengeksekusi SQL juga.
Nathan Do
12
sqlcleartelah dihapus di Django 1.9 jadi jawaban ini hanya bagus untuk versi sebelumnya. Lihat: docs.djangoproject.com/en/1.10/releases/1.9/…
Akhorus
7
Jika aplikasi yang dihapus memiliki migrasi, yang bergantung pada migrasi aplikasi lain, sistem migrasi akan rusak ketika ia melihat bahwa migrasi yang bergantung tersebut tidak ada lagi. Berhati-hatilah saat menggunakan jawaban di atas jika aplikasi yang akan dihapus adalah ketergantungan dalam riwayat migrasi salah satu aplikasi Anda.
Filip Kilibarda
1
Dan untuk kelengkapan, Anda biasanya perlu menghapus referensi ke include("appname.urls")dari proyekurls.py
nigel222
16
  1. berkomentar settings.pydi INSTALLED_APPSbaris aplikasi yang tidak perlu
  2. hapus semua folder __pycache__dan migrateproyek Anda
  3. hapus model yang tidak perlu di models.py
  4. hapus semua tautan imporviews.py , admin.pyakhiri , dll.
  5. hapus semua tautan di urls.pyaplikasi Anda yang tidak perlu
  6. dalam database, hapus tabel yang tidak perlu yang terkait dengan aplikasi (saya melakukannya dengan program bantuan "Valentina Studio")
  7. hapus folder aplikasi
  8. di baris perintah lakukan: python manage.py migratedanpython manage.py syncdb
Vadim
sumber
3

aplikasi django adalah "set" file * .py dan direktori dengan nama-aplikasi-django. Jadi Anda cukup menghapus seluruh folder dengan semua file * .py

Untuk "menghapus" tabel dari DB, Anda harus menggunakan DELETE FROM <app-name_table-names>

Selanjutnya, Anda harus menghapus baris dengan nama aplikasi dari setting.py di direktori root

V-Light
sumber
Dengan asumsi Anda tidak berbagi database dengan aplikasi lain, Anda bisa meletakkan db bernama di settings.py.
joel3000
setiap aplikasi memiliki db sendiri - lumayan
V-Light
3
@ V-Light setiap aplikasi memiliki tabelnya sendiri dan setiap proyek memiliki database sendiri.
Alireza Savand
2

Saya sangat menyukai langkah-langkah dari artikel ini - ini termasuk dukungan migrasi .

Mungkin perlu diadaptasi dalam dua Pembaruan kode - tetapi terlihat sangat aman ketika Anda harus bekerja dengan banyak penerapan (seperti: tahap pengujian, versi BETA dan produksi - dalam kasus saya)

dannydedog
sumber
2

Dalam konteks saya, proyek ada beberapa kali: Saya memiliki sistem pengembangan, beberapa rekan tim memiliki sistem pengembangan, ada sistem pementasan untuk pelanggan dan sistem produksi. Ini berarti saya tidak ingin menjalankan perintah sql dengan tangan. Saya ingin ini otomatis.

Sasaran: Hapus aplikasi dan semua tabel database.

Langkah 1: Kosongkan aplikasi, tetapi biarkan terpasang

hapus semua file dari aplikasi, kecuali folder "migrasi"

Jalankan perintah ini: manage.py makemigrations -n drop_all_tables my_app_to_remove

Direktori tersebut sekarang terlihat seperti ini:

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

Biarkan my_app_to_removedi file "settings.py".

Langkah 2: Terapkan perubahan

Perbarui semua proyek. Beri tahu rekan satu tim untuk memperbarui proyek mereka dan menjalankan migrasi.

Langkah 3: hapus "my_app_to_remove" dari settings.py

Sekarang hapus "my_app_to_remove" dari settings.py dan terapkan lagi.

guettli
sumber