我想定义自定义异常类并提高它。
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项目的"设置"文件中的"中间件"部分中添加此类的路径(最后(。
就是这样。此中间软件将在您的每个请求期间被执行,并且会检查您是否在调试中,如果有例外,此中间件将为您创建一条消息:)。