自定义异常处理程序,用于DRF响应和Django响应



我想定义自定义异常类并提高它。

django rest框架有一个挂钩,我可以在其中定义自定义外德处理程序,

(http://www.django-rest-framework.org/api-guide/exceptions/#custom-exception处理(

django还提供了一种通过中间件进行操作的方法。

问题:如果我想在DRF视图和常规Django视图中处理异常,那么在Django中间件中处理它们是否足够?

或我需要单独的处理程序以供DRF视图?

换句话说,DRF请求/响应是否也通过Django中间件?

创建一个名为 exception_middleware.py的脚本在项目目录中的任何地方(最好在主应用程序目录中(,并添加以下内容:

import logging
from django.shortcuts import render
from django.conf import settings
logger = logging.getLogger("StackDriverHandler")

class ExceptionMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response
    def __call__(self, request):
        response = self.get_response(request)
        if settings.DEBUG:
            host = "http"
        else:
            # TODO: set for https
            host = "http"
        if response.status_code == 500:
            return render(request, "error_templates/500.html")
        if response.status_code == 404:
            return render(request, "error_templates/404.html")
        if response.status_code == 403:
            return render(request, "error_templates/403.html")
        return response
   def process_exception(self, request, exception):
        try:
            logger.info(request, extra=exception)
        except Exception as e:
            logger.error(exception)
        return None
   def process_exception(self, request, exception):
        try:
            logger.info(request, extra=exception)
        except Exception as e:
            logger.error(exception)
        return None

在您的django项目的"设置"文件中的"中间件"部分中添加此类的路径(最后(。

就是这样。此中间软件将在您的每个请求期间被执行,并且会检查您是否在调试中,如果有例外,此中间件将为您创建一条消息:)。

最新更新