Django Response Middleware:获取创建响应的视图名称

时间:2018-01-15 09:29:58

标签: django django-middleware

我有简单的中间件来检查响应中的HTML是否有效。

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

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

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

也许我是盲人,但是如果我查看django调试页面,我就无法看到我的哪些方法/视图使用损坏的html创建了内容。

有没有办法向&#34添加更多信息; html无效"例外,协助开发人员?开发人员应该更容易找到相关的方法/视图。

2 个答案:

答案 0 :(得分:3)

process_view挂钩可让您访问视图函数,参数和kwargs。您可以将这些存储在请求中,然后在您提出" html无效时使用它们"异常。

答案 1 :(得分:1)

您可以使用process_view作为Alasdair提到的,初始化调试消息的字典并显示所需的信息。

您还可以将字典(self.debug_helper['process_request'] = {}')分组,如下所示,以指定请求/响应的详细信息。

__module__将为您提供定义视图函数/类的模块。

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