Django 响应中间件:获取创建响应的视图的名称

Django Response Middleware: Get name of view which created the response

我有一个简单的中间件,它检查响应中的 HTML 是否有效。

如果 HTML 无效,则 html 无效”在开发系统中引发异常。

到目前为止,xception 包含 URL 和验证错误。

然后开发人员在众所周知的黄色和灰色 django 调试页面中看到 URL。

也许我是盲人,但如果我查看 django 调试页面,我看不到我的 methods/views 中的哪个创建了损坏的 html.

的内容

有没有办法向 "html is not valid" 异常添加更多信息,以帮助开发人员?开发人员应该更容易找到相关的 method/view。

process_view 挂钩使您可以访问视图函数、args 和 kwargs。您可以根据请求存储这些,然后在引发 "html is not valid" 异常时使用它们。

您可以像 Alasdair 提到的那样使用 process_view,为您的调试消息初始化一个字典,并用所需的信息显示它们。

您还可以像下面那样对字典 (self.debug_helper['process_request'] = {}') 进行分组,以指定 Request/Response.

的详细信息

__module__ 将为您提供定义视图 function/class 的模块。

class CheckForBrokenHtmlMiddleware(MiddlewareMixin):

    def __init__(self, get_response):
        self.get_response = get_response
        self.debug_helper = {}

    def process_request(self, request):
        self.debug_helper = {}
        self.debug_helper['process_request'] = {}
        self.debug_helper['process_request']['path'] = request.path

    def process_view(self, request, view_func, view_args, view_kwargs):
        self.debug_helper['name'] = view_func.__name__
        self.debug_helper['module'] = view_func.__module__
        self.debug_helper['message'] = '"{0}" view caused an error in module "{1}"'.format(
            view_func.__name__, view_func.__module__
        )

    def process_response(self, request, response):            
        print(self.debug_helper)
        return response