全域性處理例外情況

假設你已經實現了一些邏輯來檢測修改資料庫中物件的嘗​​試,而提交更改的客戶端沒有最新的修改。如果發生這種情況,則引發自定義異常 ConfictError(detailed_message)

現在,你希望在發生此錯誤時返回 HTTP 409(Confict) 狀態程式碼。你通常可以使用它作為中介軟體,而不是在每個可能引發此異常的檢視中處理它。

class ConfictErrorHandlingMiddleware:
    def process_exception(self, request, exception):
        if not isinstance(exception, ConflictError):
            return  # Propagate other exceptions, we only handle ConflictError
        context = dict(confict_details=str(exception))
        return TemplateResponse(request, '409.html', context, status=409)