我想定义一个自定义异常类并引发它。
Django rest框架有一个钩子,我可以在其中定义自定义异常处理程序,
(http://www.django-rest-framework.org/api-guide/exceptions/#custom-exception-handling)
Django还提供了一种通过中间件实现该功能的方法。
问:如果我想处理drf视图和常规django视图中的异常,那么在django中间件中处理它们就足够了吗?
还是我需要独立的处理程序来处理DRF视图?
换句话说,DRF请求/响应是否也通过django中间件?
发布于 2022-08-26 05:58:36
在项目目录中的任何位置创建一个名为exception_middleware.py
的脚本(最好是在主app目录中),并添加以下内容:
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项目的settings.py文件中的中间件部分中添加到该类的路径(最后)。
就这样。该中间件将在每个请求期间执行,并将检查您是否处于调试中,如果存在异常,则该中间件将为您创建一条消息:)。
https://stackoverflow.com/questions/44303780
复制相似问题