我正在寻找可以执行以下操作的最佳解决方案:

  • 捕获Django应用程序
  • 中发生的所有异常
  • 触发各种事件,例如邮件,发布到Analytics(分析)提供商或登录到记录器。
  • 创建一个中央错误处理程序,它将在不同的条件下执行不同的操作。

  • 如果有办法做到这一点,怎么做以及如何去做呢?

    最佳答案

    在编写应用程序时,可以使用以下方法:

    每当您的应用引发异常时,请使用像这样的自定义应用特定异常

    class FooException(Exception):
        """Base class for all app specific exceptions"""
        pass
    
    classFooPermissionException(FooException):
        """Specific class for permission related exceptions"""
        pass
    

    现在,您的应用程序可以提供自定义中间件
    class FooExceptionMiddleware(object):
        """App specific middleware to handle app specific errors"""
    
        def process_exception(self, request, e):
            """Processes exceptions"""
            if isinstance(e, FooException):
    
                if isinstance(e, FooPermissionException):
                    # handle PermissionExceptions here...
    
            return None
    

    您可以阅读有关Django中间件here的更多信息。

    编辑:

    我认为您可以使用上述方法来捕获所有Exceptions:看看Django's exception source code。 Django的内部异常是Exception的 sibling 。因此,使用类似以下代码的代码,您可以捕获所有异常,无论它们在项目中引发了什么地方:
    class AllExceptionMiddleware(object):
        def process_exception(self, request, e):
            if isinstance(e, Exception):
                # do stuff
            return None
    

    10-07 12:35
    查看更多