2013-03-03 13 views
5

Trong khi phát triển dự án Django của tôi Tôi nhận được một DatabaseError nói rằng:Django - Làm thế nào để có được thông tin gỡ lỗi của DatabaseError "giao dịch hiện tại bị hủy bỏ" trong trang lỗi Django?

giao dịch vãng lai được hủy bỏ, các lệnh bị bỏ qua cho đến khi kết thúc khối giao dịch

Tôi biết điều này sẽ xảy ra vì đã có một giao dịch PostgreSQL xấu mà không có một rollback và lỗi trong giao dịch xấu này có thể được tìm thấy trong nhật ký lỗi PostgreSQL. Tuy nhiên, tôi nghĩ rằng nó sẽ là cách convienient hơn nếu lỗi này sẽ được hiển thị trên trang lỗi Django. Sau đó, bạn có thể trực tiếp xem vấn đề là gì.

Vì vậy, có thể nhận các lỗi PostgreSQL này trên trang lỗi Django không? Và nếu vậy, làm thế nào?

+1

Bạn đã xem thanh công cụ gỡ lỗi django chưa? - https://github.com/robhudson/django-debug-toolbar/commits/master/ –

+0

Bạn có nghiên cứu gì không? Bạn đã thử bất cứ điều gì? Bạn đã kiểm tra tài liệu Django chưa? Thể hiện nỗ lực của bạn. –

+0

@BelowtheRadar Có. Bạn có biết rằng câu hỏi này là khoảng một tuổi và đã được trả lời chưa? – rednaw

Trả lời

2

Nếu bạn muốn xem chi tiết nitty-gritty của trường hợp ngoại lệ, bạn có thể viết tùy chỉnh middleware class để xử lý chế độ xem và bắt gặp lỗi django.db.DatabaseError và kiểm tra ngoại lệ trong phiên gỡ lỗi từ máy chủ phát triển của bạn console:

from django.db import DatabaseError 

class DatabaseErrorMiddleware(object): 
    def process_view(self, request, view, args, kwargs): 
     try: 
      view(request, *args, **kwargs) 
     except DatabaseError as err: 
      import pdb; pdb.set_trace() 
      # You can now fully inspect the `e` exception object and it's context 

những trường hợp ngoại lệ là lành tính và thường xảy ra bất cứ khi nào theo yêu cầu-phản ứng của một chủ đề chảy sớm kết thúc, khá thường xuyên trong quá trình phát triển nếu khách hàng của bạn hủy bỏ kết nối trước khi ứng dụng có thể trở lại một phản ứng, mặc dù điều đó có thể không phải tất cả của nó.

Các vấn đề liên quan