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