Django: Django ऐप को पूरी तरह से कैसे अनइंस्टॉल करें?


109

डेटाबेस हटाने के साथ पूरी तरह से एक Django ऐप की स्थापना रद्द करने की प्रक्रिया क्या है?


उस ऐप का नाम सेटिंग्स से इंस्टॉल किए गए ऐप्स से हटा दें, फिर मुख्य urls.py फ़ाइल से उस ऐप के किसी भी लिंक को हटा दें। तब आप उस ऐप को सुरक्षित रूप से हटा सकते हैं
Aseem

यदि आप SQLite का उपयोग कर विकास कर रहे हैं और आप डेटाबेस को रीसेट करने में कोई आपत्ति नहीं करते हैं, तो क्या यह केवल ऐप फ़ोल्डर को db.sqlite3हटाने और , और इसमें से निकालने के लिए ठीक INSTALLED_APPSहै settings.py?
केविन

जवाबों:


150
  1. Django <1.7 के पास एक आसान प्रबंधन आदेश है जो आपको एक ऐप के लिए सभी तालिकाओं को छोड़ने के लिए आवश्यक SQL देगा। देखें sqlclear डॉक्स अधिक जानकारी के लिए। असल में, रनिंग ./manage.py sqlclear my_app_nameसे आपको एसक्यूएल स्टेटमेंट मिलते हैं, जिन्हें आपके डीबी में ऐप के सभी निशानों से छुटकारा पाने के लिए निष्पादित किया जाना चाहिए। आपको अभी भी उन बयानों को अपने 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 के इर्द-गिर्द घूमने से ज्यादा अच्छा है।
डेवज

25
Django 1.7 पर, यदि आप माइग्रेशन का उपयोग करते हैं, तो चरण 1 होगा ./manage.py migrate my_app_name zero। और यह स्वतः ही SQL को भी निष्पादित करेगा।
नाथन डू

12
sqlclearDjango 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.pyadmin.py
  5. urls.pyअपने अनावश्यक एप्लिकेशन पर सभी लिंक को हटा दें
  6. डेटाबेस में एप्लिकेशन से जुड़े अनावश्यक तालिकाओं को हटा दें (मैं इसे "वैलेंटिना स्टूडियो" प्रोग्राम की मदद से करता हूं)
  7. एप्लिकेशन का फ़ोल्डर हटाएं
  8. कमांड लाइन में यह करें: python manage.py migrateऔरpython manage.py syncdb

3

django ऐप * .py फ़ाइलों का एक "सेट" और django-app-name के साथ एक निर्देशिका है। तो आप बस सभी * .py फ़ाइलों के साथ पूरे फ़ोल्डर को हटा सकते हैं

DB से तालिकाओं को "हटाने" के लिए आपको उपयोग करना चाहिए DELETE FROM <app-name_table-names>

इसके अलावा, आपको रूट डाइरेक्टरी में सेटिंग व्हाट्स ऐप-नेम से सेटिंग को डिलीट करना होगा


यह मानकर कि आप डेटाबेस को किसी अन्य ऐप के साथ साझा नहीं कर रहे हैं, तो आप सेटिंग नाम के डीबी को हटा सकते हैं।
joel3000

प्रत्येक ऐप का अपना db है - बुरा नहीं है
V-लाइट

3
@ वी-लाइट प्रत्येक ऐप की अपनी तालिका है और प्रत्येक प्रोजेक्ट का अपना डेटाबेस है।
अलिर्ज़ा सावन

2

मैं वास्तव में इस लेख के चरणों से प्यार करता हूं - इसमें माइग्रेशन समर्थन शामिल है ।

हो सकता है कि कोड के दो अपडेट में इसे अनुकूलित करने की आवश्यकता हो - लेकिन वास्तव में सुरक्षित दिखता है जब आपको कई तैनाती के साथ काम करना होता है (जैसे: परीक्षण चरण, बीटा संस्करण और उत्पादन - मेरे मामले में)


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"सेटिंग्स" फ़ाइल में छोड़ दें ।

चरण 2: परिवर्तनों को नियुक्त करें

सभी परियोजनाओं को अद्यतन करें। बता दें टीम के साथी अपने प्रोजेक्ट को अपडेट करने के लिए और माइग्रेशन चलाने के लिए।

चरण 3: सेटिंग्स से "my_app_to_remove" को हटा दें

अब settings.py से "my_app_to_remove" हटाएं और फिर से तैनात करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.