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
我有一个简单的中间件,它检查响应中的 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