Django: Bir Django uygulaması nasıl tamamen kaldırılır?


109

Veritabanının kaldırılmasıyla birlikte bir Django uygulamasını tamamen kaldırma prosedürü nedir?


o uygulama adını settings.py yüklü uygulamalardan kaldırın, ardından bu uygulamaya giden tüm bağlantıları ana urls.py dosyasından kaldırın. O zaman o uygulamayı güvenle silebilirsiniz
Aseem

SQLite kullanarak geliştirme aşamasındaysanız ve veritabanını sıfırlamaktan çekinmiyorsanız, yalnızca uygulama klasörünü db.sqlite3kaldırıp INSTALLED_APPSiçerisinden kaldırmanız sorun olur settings.pymu?
Kevin

Yanıtlar:


150
  1. Django <1.7, bir uygulamanın tüm tablolarını bırakmanız için size gerekli SQL'i verecek kullanışlı bir yönetim komutuna sahiptir. Daha fazla bilgi için sqlclear belgelerine bakın . Temel olarak, çalıştırmak ./manage.py sqlclear my_app_name, DB'nizdeki uygulamanın tüm izlerinden kurtulmak için yürütülmesi gereken SQL ifadelerini almanızı sağlar. Yine de bu ifadeleri SQL istemcinize kopyalayıp yapıştırmanız (veya yönlendirmeniz) gerekir. Django 1.7 ve üstü için, veritabanı temizlemesini otomatik olarak çalıştıran ./manage.py migrate my_app_name zero( geçiş belgelerine bakın) kullanın .

  2. Uygulamayı projenizden kaldırmak için tek yapmanız gereken onu INSTALLED_APPSprojenizden kaldırmaktır settings.py. Django artık uygulamayı yüklemeyecek.

  3. Uygulama dosyalarının artık ortalıkta dolaşmasını istemiyorsanız, uygulama dizinini proje dizininizden veya PYTHONPATH'ınızda bulunduğu başka bir konumdan silin.

  4. (isteğe bağlı) Uygulama, medya dosyalarını, önbellek dosyalarını veya diğer geçici dosyaları bir yerde sakladıysa, bunları da silmek isteyebilirsiniz. Ayrıca, uygulamadan kalabilecek kalıcı oturum verilerine karşı da dikkatli olun.

  5. (isteğe bağlı) Eski içerik türlerini de kaldırırım.

Öyle gibi.

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
Mükemmel cevap, yapacağım tek bir ekleme: pip uninstall paket-adı arkadaşınız, PYTHONPATH'inizde gezinmekten çok daha iyi.
DaveJ

25
Django 1.7'de, geçiş kullanıyorsanız, 1. adım olacaktır ./manage.py migrate my_app_name zero. Ve otomatik olarak SQL'i de çalıştıracaktır.
Nathan Do

12
sqlclearDjango 1.9'da kaldırıldı, bu nedenle bu yanıt yalnızca önceki sürümler için iyidir. Bakınız: docs.djangoproject.com/en/1.10/releases/1.9/…
Akhorus

7
Silinmekte olan uygulama, diğer uygulamanın taşıma işlemlerinin bağlı olduğu taşıma işlemlerine sahipse, bu bağımlı taşıma işlemlerinin artık mevcut olmadığını gören taşıma sistemi arızalanır. Silinecek uygulama, uygulamalarınızdan başka birinin taşıma geçmişine bağımlıysa, yukarıdaki cevabı kullanırken dikkatli olun.
Filip Kilibarda

1
Ve tamlık için, tipik olarak include("appname.urls")projeden bir referansı kaldırmanız gerekir urls.py
nigel222

16
  1. üzerinde açıklama settings.pyinINSTALLED_APPS gereksiz uygulamanın hattı
  2. tüm klasörü sil __pycache__vemigrate projenizde
  3. içindeki gereksiz modeli sil models.py
  4. içindeki tüm içe aktarma bağlantısını sil views.py, admin.pysonlandır vb.
  5. urls.pygereksiz uygulamanızdaki tüm bağlantıları silin
  6. veritabanında uygulamayla ilişkili gereksiz tabloları silin (bunu "Valentina Studio" yardım programıyla yapıyorum)
  7. uygulamanın klasörünü sil
  8. komut satırında şunu yapın: python manage.py migratevepython manage.py syncdb

3

django uygulaması * .py dosyalarının bir "kümesidir" ve django-app-adına sahip bir dizindir. Böylece, tüm * .py dosyalarını içeren tüm klasörü silebilirsiniz.

Tabloları DB'den "kaldırmak" için kullanmalısınız DELETE FROM <app-name_table-names>

Ayrıca, bir kök dizindeki setting.py'den uygulama-adı içeren satırları silmeniz gerekir.


Veritabanını başka bir uygulamayla paylaşmadığınızı varsayarsak, sadece settings.py adlı veritabanını bırakabilirsiniz.
joel3000

her uygulamanın kendi db'si var - fena değil
V-Light

3
@ V-Light her uygulamanın kendi tablosu ve her projenin kendi veritabanı vardır.
Alireza Savand

3

Benim bağlamımda projeler birkaç kez var: Bir geliştirme sistemim var, bazı takım arkadaşlarımın bir geliştirme sistemi var, müşteri için bir aşamalandırma sistemi ve bir üretim sistemi var. Bu, sql komutlarını elle çalıştırmak istemediğim anlamına geliyor. Otomatik olmasını istiyorum.

Hedef: Uygulamayı ve tüm veritabanı tablolarını kaldırın.

1.Adım: Uygulamayı boşaltın, ancak yüklü bırakın

"taşıma" klasörü dışındaki tüm dosyaları uygulamadan kaldırın

Bu komutu yürütün: manage.py makemigrations -n drop_all_tables my_app_to_remove

Dizin şimdi şöyle görünüyor:

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

Ayrılmak my_app_to_remove"Settings.py" dosyasında .

2. Adım: Değişiklikleri dağıtın

Tüm projeleri güncelleyin. Ekip arkadaşlarına projelerini güncellemelerini ve geçişleri yapmalarını söyleyin.

3. Adım: "my_app_to_remove" öğesini settings.py'den kaldırın

Şimdi "my_app_to_remove" öğesini settings.py'den kaldırın ve yeniden dağıtın.


2

Bu makaledeki adımları gerçekten çok seviyorum - buna geçiş dahil desteği .

Belki iki kod güncellemesine uyarlanması gerekiyor - ancak birçok dağıtımla çalışmanız gerektiğinde gerçekten güvenli görünüyor (benim durumumda test aşaması, BETA sürümü ve üretim gibi)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.