Django: Làm cách nào để gỡ cài đặt hoàn toàn ứng dụng Django?


109

Quy trình gỡ cài đặt hoàn toàn ứng dụng Django, hoàn tất với việc xóa cơ sở dữ liệu là gì?


xóa tên ứng dụng đó khỏi settings.py ứng dụng đã cài đặt, sau đó xóa bất kỳ liên kết nào đến ứng dụng đó khỏi tệp urls.py chính. Sau đó, bạn có thể xóa ứng dụng đó một cách an toàn
Aseem

Nếu bạn đang phát triển bằng SQLite và bạn không ngại đặt lại cơ sở dữ liệu, bạn chỉ cần xóa thư mục ứng dụng db.sqlite3và xóa nó khỏi INSTALLED_APPStrong có được settings.pykhông?
Kevin

Câu trả lời:


150
  1. Django <1.7 có một lệnh quản lý tiện dụng sẽ cung cấp cho bạn SQL cần thiết để loại bỏ tất cả các bảng cho một ứng dụng. Xem tài liệu sqlclear để biết thêm thông tin. Về cơ bản, chạy ./manage.py sqlclear my_app_namegiúp bạn nhận được các câu lệnh SQL cần được thực thi để loại bỏ tất cả các dấu vết của ứng dụng trong DB của bạn. Bạn vẫn cần sao chép và dán (hoặc chuyển) các câu lệnh đó vào máy khách SQL của mình. Đối với Django 1.7 trở lên, hãy sử dụng ./manage.py migrate my_app_name zero(xem tài liệu di chuyển ), chạy tự động dọn dẹp cơ sở dữ liệu.

  2. Để xóa ứng dụng khỏi dự án của bạn, tất cả những gì bạn cần làm là xóa ứng dụng khỏi dự án INSTALLED_APPScủa bạn settings.py. Django sẽ không tải ứng dụng nữa.

  3. Nếu bạn không muốn tệp của ứng dụng bị treo nữa, hãy xóa thư mục ứng dụng khỏi thư mục dự án của bạn hoặc vị trí khác trên PYTHONPATH của bạn nơi nó cư trú.

  4. (tùy chọn) Nếu ứng dụng đã lưu trữ các tệp phương tiện, tệp bộ nhớ cache hoặc các tệp tạm thời khác ở đâu đó, bạn cũng có thể muốn xóa chúng. Cũng nên cảnh giác với dữ liệu phiên kéo dài có thể còn sót lại từ ứng dụng.

  5. (tùy chọn) Tôi cũng sẽ xóa mọi loại nội dung cũ.

Như vậy.

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
Câu trả lời tuyệt vời, chỉ một bổ sung mà tôi muốn thực hiện: tên gói gỡ cài đặt pip là bạn của bạn, tốt hơn nhiều so với việc đi vòng quanh PYTHONPATH của bạn.
DaveJ

25
Trên Django 1.7, nếu bạn sử dụng chuyển đổi, bước 1 sẽ là ./manage.py migrate my_app_name zero. Và nó cũng sẽ tự động thực thi SQL.
Nathan Do

12
sqlclearđã bị loại bỏ trong Django 1.9 vì vậy câu trả lời này chỉ tốt cho các phiên bản trước. Xem: docs.djangoproject.com/en/1.10/releases/1.9/…
Akhorus,

7
Nếu ứng dụng bị xóa có quá trình di chuyển mà quá trình di chuyển của ứng dụng khác phụ thuộc vào, hệ thống di chuyển sẽ bị hỏng khi thấy rằng những di chuyển phụ thuộc đó không còn tồn tại. Hãy cẩn thận khi sử dụng câu trả lời trên nếu ứng dụng sẽ bị xóa phụ thuộc vào lịch sử di chuyển của một ứng dụng khác trong các ứng dụng của bạn.
Filip Kilibarda

1
Và để hoàn chỉnh, bạn thường cần xóa tham chiếu đến include("appname.urls")khỏi dự ánurls.py
nigel222

16
  1. bình luận trên settings.pytrong INSTALLED_APPSdòng ứng dụng không cần thiết của
  2. xóa tất cả thư mục __pycache__migratetại dự án của bạn
  3. xóa mô hình không cần thiết trong models.py
  4. xóa tất cả liên kết nhập trong views.py, admin.pykết thúc , v.v.
  5. xóa tất cả liên kết trong urls.pyứng dụng không cần thiết của bạn
  6. trong cơ sở dữ liệu xóa các bảng không cần thiết được liên kết với ứng dụng (tôi làm điều đó với chương trình trợ giúp "Valentina Studio")
  7. xóa thư mục của ứng dụng
  8. trong dòng lệnh làm điều đó: python manage.py migratepython manage.py syncdb

3

Ứng dụng django là một "tập hợp" các tệp * .py và một thư mục có tên ứng dụng django. Vì vậy, bạn có thể chỉ cần xóa toàn bộ thư mục với tất cả các tệp * .py

Để "loại bỏ" các bảng khỏi DB, bạn nên sử dụng DELETE FROM <app-name_table-names>

Hơn nữa, bạn phải xóa các dòng với tên ứng dụng khỏi setting.py trong thư mục gốc


Giả sử bạn không chia sẻ cơ sở dữ liệu với ứng dụng khác, bạn chỉ có thể thả db có tên trong settings.py.
joel3000

mỗi ứng dụng có db riêng - không xấu
V-Light

3
@ V-Light mỗi ứng dụng có bảng riêng và mỗi dự án có cơ sở dữ liệu riêng.
Alireza Savand

2

Tôi thực sự thích các bước từ bài viết này - nó bao gồm hỗ trợ di chuyển .

Có thể nó cần phải được điều chỉnh trong hai Bản cập nhật mã - nhưng có vẻ thực sự an toàn khi bạn phải làm việc với nhiều triển khai (như: giai đoạn thử nghiệm, phiên bản BETA và sản xuất - trong trường hợp của tôi)


2

Trong bối cảnh của tôi, các dự án tồn tại nhiều lần: Tôi có một hệ thống phát triển, một số đồng đội có một hệ thống phát triển, có một hệ thống dàn dựng cho khách hàng và một hệ thống sản xuất. Điều này có nghĩa là tôi không muốn thực hiện các lệnh sql bằng tay. Tôi muốn nó được tự động hóa.

Mục tiêu: Xóa ứng dụng và tất cả các bảng cơ sở dữ liệu.

Bước 1: Làm trống ứng dụng nhưng vẫn cài đặt ứng dụng

xóa tất cả các tệp khỏi ứng dụng, ngoại trừ thư mục "di chuyển"

Thực hiện lệnh này: manage.py makemigrations -n drop_all_tables my_app_to_remove

Thư mục bây giờ trông như thế này:

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

Để lại my_app_to_removetrong tệp "settings.py".

Bước 2: Triển khai các thay đổi

Cập nhật tất cả các dự án. Yêu cầu các thành viên trong nhóm cập nhật dự án của họ và chạy quá trình di chuyển.

Bước 3: xóa "my_app_to_remove" khỏi settings.py

Bây giờ, hãy xóa "my_app_to_remove" khỏi settings.py và triển khai lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.