Cách gỡ lỗi trong Django

By JoeVu, at: 15:28 Ngày 21 tháng 7 năm 2025

Thời gian đọc ước tính: __READING_TIME__ minutes

How to debug in Django
How to debug in Django

Gỡ lỗi là một phần không thể tránh khỏi trong quá trình phát triển và thực hiện hiệu quả có thể giúp bạn tiết kiệm hàng giờ (hoặc hàng ngày) bực bội. Nếu bạn đang làm việc với Django, tin tốt là framework này, kết hợp với các công cụ và tài nguyên cộng đồng của Python, cung cấp cho bạn mọi thứ cần thiết để gỡ lỗi thông minh và hiệu quả.

 

Trong bài viết này, chúng ta sẽ khám phá những cách tốt nhất để gỡ lỗi một ứng dụng Django, từ các kỹ thuật đơn giản đến các công cụ mạnh mẽ được sử dụng bởi các chuyên gia.

 

1. Sử dụng pdb - Trình gỡ lỗi tích hợp sẵn của Python

 

Cách cổ điển và được khuyến nghị nhất để tạm dừng và kiểm tra mã của bạn là chèn:

 

Khi trình thông dịch gặp dòng đó, nó sẽ mở một shell tương tác nơi bạn có thể:

 

  • Xem giá trị biến
     

  • Bước qua mã (n để tiếp tục, s để bước vào, c để tiếp tục)
     

  • Thoát khỏi chế độ gỡ lỗi (q để thoát)

 

Thêm vào: Trong Python 3.7 trở lên, bạn có thể sử dụng:

 

breakpoint()

 

Nó hoạt động giống như pdb.set_trace().

 

2. Thêm ghi nhật ký - Thay thế sạch sẽ cho Print

 

Mặc dù print() có thể hữu ích cho các kiểm tra nhanh, nhưng việc sử dụng mô-đun logging của Python linh hoạt hơn và thân thiện với sản xuất hơn.

 

Ví dụ thiết lập:

 

import logging
logger = logging.getLogger(__name__)

logger.debug("Thông báo gỡ lỗi")
logger.info("Thông tin")
logger.error("Đã xảy ra lỗi")

 

Bạn có thể cấu hình mức độ nhật ký và bộ xử lý trong settings.py để xuất nhật ký ra bảng điều khiển, tệp hoặc dịch vụ bên ngoài.

 

3. Bật chế độ Gỡ lỗi tích hợp sẵn của Django Debug

 

Đảm bảo môi trường phát triển của bạn có: DEBUG = True

 

Với chế độ này được bật, Django sẽ hiển thị các trang lỗi chi tiết với dấu vết ngăn xếp, biến cục bộ và ngữ cảnh hữu ích.

 

⚠️ Không bao giờ bật DEBUG trong sản xuất!

 

4. Cài đặt Django Debug Toolbar

 

Để có cách gỡ lỗi ứng dụng Django trực quan và tương tác, hãy cài đặt Django Debug Toolbar.

 

Nó hiển thị:

 

  • Câu truy vấn SQL và thời gian thực thi
     

  • Ngữ cảnh mẫu
     

  • Tiêu đề yêu cầu và tín hiệu
     

  • Sử dụng bộ nhớ cache, tệp tĩnh và hơn thế nữa

 

 

Cài đặt:

 

pip install django-debug-toolbar

 

Thêm vào INSTALLED_APPSMIDDLEWARE, và bao gồm các URL của nó. Giờ đây trình duyệt của bạn sẽ hiển thị một bảng điều khiển trên mọi trang.

 

5. Kiểm tra Views với Django’s Test Client

 

Đôi khi, bạn muốn kiểm tra một view một cách riêng biệt.

 

Test client tích hợp sẵn của Django cho phép bạn mô phỏng các yêu cầu HTTP:

 

from django.test import Client
client = Client()
response = client.get('/your-url/')
print(response.content)

 

Tuyệt vời để gỡ lỗi API và views mà không cần mở trình duyệt.

 

6. Sử dụng shell_plus từ django-extensions

 

Một công cụ chuyên nghiệp khác là shell_plus, một shell tương tác nâng cao từ gói django-extensions. Nó tự động nhập các mô hình, cài đặt của bạn và cho phép bạn kiểm tra các truy vấn ORM hoặc gọi hàm một cách dễ dàng.

 

Cài đặt:

 

pip install django-extensions

 

Thêm nó vào INSTALLED_APPS và chạy:

 

python manage.py shell_plus

 

7. Tạo Middleware Gỡ lỗi Tùy chỉnh

 

Đôi khi bạn muốn tìm ra các vấn đề cụ thể trên các yêu cầu. Việc tạo middleware của riêng bạn có thể giúp ghi nhật ký:

 

  • Yêu cầu đến
     

  • Phản hồi
     

  • Lỗi

 

Một middleware mẫu:

 

class SimpleLogMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        print(f"Đường dẫn yêu cầu: {request.path}")
        response = self.get_response(request)
        print(f"Trạng thái phản hồi: {response.status_code}")
        return response

 

Hữu ích để theo dõi các lỗi khó tìm trong sản xuất (chỉ cần cẩn thận với những gì bạn ghi nhật ký!).

 

Kết luận: Chọn đúng công cụ cho đúng công việc

 

Tình huống Công cụ
Cần tạm dừng và kiểm tra mã pdb / breakpoint()
Muốn giao diện gỡ lỗi trực quan Django Debug Toolbar
Ghi nhật ký và giám sát Mô-đun logging
Kiểm tra hành vi view Django Test Client
Kiểm tra mô hình tương tác shell_plus
Cần ghi nhật ký yêu cầu tùy chỉnh Middleware

 

 

Mẹo chuyên nghiệp:

 

“Gỡ lỗi giống như là thám tử trong một bộ phim hình sự mà bạn cũng là kẻ giết người.”
– Filipe Fortes

 

Chúc bạn gỡ lỗi vui vẻ!

 

Câu hỏi và câu trả lời

 

Cách tốt nhất để tạm dừng mã Django và kiểm tra biến là gì?

 

Bạn có thể sử dụng trình gỡ lỗi tích hợp sẵn của Python pdb bằng cách chèn import pdb; pdb.set_trace() vào mã của bạn. Trong Python 3.7 trở lên, chỉ cần sử dụng breakpoint(). Điều này sẽ mở một shell tương tác nơi bạn có thể bước qua mã, kiểm tra biến và gỡ lỗi logic một cách tương tác.

 

Tôi nên sử dụng print() hay logging để gỡ lỗi?

 

Mặc dù print() nhanh chóng, nhưng tốt hơn là nên sử dụng mô-đun logging của Python. Nó linh hoạt hơn, hoạt động tốt trong cả phát triển và sản xuất, và cho phép kiểm soát mức độ nhật ký, định dạng và xuất ra tệp hoặc hệ thống giám sát.

 

Chế độ DEBUG của Django hoạt động như thế nào?

 

Khi DEBUG = True trong settings.py, Django sẽ hiển thị các trang lỗi chi tiết với dấu vết ngăn xếp, giá trị biến và ngữ cảnh gỡ lỗi hữu ích. Điều này cực kỳ hữu ích trong quá trình phát triển nhưng hãy đảm bảo rằng nó không bao giờ được bật trong sản xuất vì lý do bảo mật.

 

Django Debug Toolbar là gì và nó giúp ích như thế nào?

 

Django Debug Toolbar là một công cụ gỡ lỗi mạnh mẽ thêm một bảng điều khiển vào các trang web của bạn. Nó hiển thị các truy vấn SQL, thời gian thực thi, tiêu đề yêu cầu, ngữ cảnh mẫu, sử dụng bộ nhớ cache và hơn thế nữa, giúp bạn kiểm tra những gì đang xảy ra bên dưới mỗi yêu cầu.

 

Làm thế nào tôi có thể gỡ lỗi views hoặc API mà không cần sử dụng trình duyệt?

 

Sử dụng test client tích hợp sẵn của Django:

 

from django.test import Client
client = Client()
response = client.get('/your-url/')
print(response.content)

 

Điều này cho phép bạn mô phỏng các yêu cầu HTTP và kiểm tra phản hồi trực tiếp trong terminal.

 

shell_plus là gì và tại sao tôi nên sử dụng nó?

 

shell_plus từ gói django-extensions là một shell tương tác nâng cao tự động nhập tất cả các mô hình và cài đặt của bạn. Nó rất lý tưởng để nhanh chóng kiểm tra các truy vấn ORM hoặc thử các hàm mà không cần nhập thủ công mọi thứ.

 

Làm thế nào tôi có thể ghi nhật ký các yêu cầu và phản hồi đến trong Django?

 

Bạn có thể tạo middleware tùy chỉnh để ghi nhật ký thông tin yêu cầu và phản hồi. Ví dụ:

 

class SimpleLogMiddleware:
    def __call__(self, request):
        print(f"Đường dẫn yêu cầu: {request.path}")
        response = self.get_response(request)
        print(f"Trạng thái phản hồi: {response.status_code}")
        return response

 

Điều này giúp theo dõi các sự cố trên các yêu cầu, chỉ cần tránh ghi nhật ký thông tin nhạy cảm trong sản xuất.

Tag list:

Theo dõi

Theo dõi bản tin của chúng tôi và không bao giờ bỏ lỡ những tin tức mới nhất.