全局处理例外情况

假设你已经实现了一些逻辑来检测修改数据库中对象的尝​​试,而提交更改的客户端没有最新的修改。如果发生这种情况,则引发自定义异常 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)