Tôi bắt đầu nghĩ về xử lý ngoại lệ thích hợp trong ứng dụng Django của tôi và mục tiêu của tôi là làm cho ứng dụng trở nên thân thiện với người dùng nhất có thể. Bằng sự thân thiện với người dùng, tôi ngụ ý rằng người dùng phải luôn hiểu rõ chi tiết những gì đã xảy ra chính xác. Tiếp theo this post, việc thực hành tốt nhất làDjango - ngoại lệ xử lý thực hành tốt nhất và gửi thông báo lỗi tùy chỉnh
sử dụng một phản ứng JSON với trạng thái 200 cho phản ứng bình thường của bạn và trả về một (thích hợp!) Phản ứng 4xx/5xx lỗi. Chúng cũng có thể mang theo tải trọng JSON JSON, do đó phía máy chủ của bạn có thể thêm các chi tiết bổ sung về lỗi.
Tôi đã cố gắng google bằng các từ khóa trong câu trả lời này, bởi vẫn có nhiều câu hỏi hơn câu trả lời trong đầu.
- Làm cách nào để quyết định mã lỗi nào - 400 hoặc 500 - để trả lại? Tôi có nghĩa là, Django có nhiều loại lỗi được xác định trước, và làm thế nào tôi có thể thực hiện bản đồ này giữa các loại ngoại lệ Django và 400-500 mã lỗi để làm cho các khối xử lý ngoại lệ như DRY và tái sử dụng càng tốt?
- Phương pháp tiếp cận với phần mềm trung gian được đề xuất bởi @Reorx trong the post có được coi là khả thi không? (Câu trả lời chỉ có một upvote, do đó làm cho tôi miễn cưỡng để nghiên cứu chi tiết và thực hiện nó trong dự án của tôi
- Quan trọng nhất, đôi khi tôi có thể muốn đưa ra lỗi liên quan đến logic nghiệp vụ chứ không phải cú pháp không chính xác hoặc chuẩn Ví dụ: nếu không có CEO trong pháp nhân của tôi, tôi có thể muốn cấm người dùng thêm hợp đồng. Trạng thái lỗi trong trường hợp này là gì và làm cách nào để tôi gửi lỗi giải thích chi tiết về lỗi của mình cho người sử dụng?
chúng ta hãy xem xét nó trên một cái nhìn đơn giản
def test_view (request):
try:
# Some code ....
if my_business_logic_is_violated():
# How do I raise the error
error_msg = "You violated bussiness logic because..."
# How do I pass error_msg
my_response = {'my_field' : value}
except ExpectedError as e:
# what is the most appropriate way to pass both error status and custom message
# How do I list all possible error types here (instead of ExpectedError to make the exception handling block as DRY and reusable as possible
return JsonResponse({'status':'false','message':message}, status=500)
Đây là câu trả lời hay nhất tôi đã xem trên trang web. Cảm ơn bạn rất nhiều vì đã giải thích. Tôi sẽ chọn đánh dấu câu trả lời này là được chấp nhận. Chỉ một yêu cầu nhỏ. Bạn có thể giải thích rõ ràng bằng cách gửi đoạn mã như thế nào vi phạm my_business_logic phù hợp với toàn bộ hình ảnh –
NBajanca, lỗi 428 không được Google Chrome công nhận (mặc dù ok với IE). Bạn có thể vui lòng đề xuất mã lỗi nào cho tôi phù hợp nhất với trường hợp khi bạn muốn tăng lỗi chỉ vì logic nghiệp vụ không chính xác? –
@ EdgarNavasardyan Tôi nghĩ rằng nó phải là một lỗi 400. Tôi không thể tìm thấy một mã tốt hơn để mô tả này và nó rõ ràng là một yêu cầu không hợp lệ từ quan điểm máy chủ của xem. Tôi đã cập nhật câu trả lời để giải thích nó tốt hơn. – NBajanca