如何设置';一网打尽';在PythonPyramid中查看以记录静态文件的传入请求?
出于调试目的,我试图查看从html文件中请求了哪些静态文件(css、js、jpg等)。我在这里阅读了文档:我已经像这样设置了我的配置:如何设置';一网打尽';在PythonPyramid中查看以记录静态文件的传入请求?,python,pyramid,waitress,Python,Pyramid,Waitress,出于调试目的,我试图查看从html文件中请求了哪些静态文件(css、js、jpg等)。我在这里阅读了文档:我已经像这样设置了我的配置: config.add_route('catchall_static', 'static/*subpath') 我的看法是: @view_config(route_name='catchall_static') path_info = request._headers.environ['PATH_INFO'] log.debug('path info = {0}
config.add_route('catchall_static', 'static/*subpath')
我的看法是:
@view_config(route_name='catchall_static')
path_info = request._headers.environ['PATH_INFO']
log.debug('path info = {0} {1}'.format(path_info, query_string))
return request.response
有了这段代码,有几件事正在进行
1) 虽然静态文件是通过视图来的,但它们实际上并没有加载到浏览器中
2) 当静态文件通过视图时,我的代码至少在日志记录中起作用,但有50%的时间我会出现以下错误:
回溯:
路径信息=请求。_headers.environ['path\u info']
AttributeError:“非类型”对象没有属性“环境”
错误似乎集中在html文件(如css文件)中的eariler上,而html文件底部的.js文件有时可以工作
所以基本上我不知道我是接近还是完全走错了解决问题的方向。有人知道正确的方法吗?您确定,此路由可以成功地处理任何请求吗? 实现您的目标的可能性有:WSGI中间件、金字塔型中间层或自定义事件订阅者 定制订户可能是最简单的订户。此订阅服务器在创建响应之前被调用,因此它无法知道响应代码、内容等。 要实现这一点,您可以添加请求完成回调或使用其他方法之一
from pyramid.events import NewRequest
from pyramid.events import subscriber
@subscriber(NewRequest)
def static_logger(event):
logger = logging.getLogger('static')
request = event.request
if request.path_info.startswith('/static'):
logger.info('static request: {} {}'.format(request.path_info,
request.query_string))
并在development.ini中激活记录器:
[loggers]
keys = root, static
[logger_static]
level = DEBUG
handlers = console
qualname = static
谢谢我在你发帖子之前找到了答案。你的回答是正确的。仅供参考,我使用了@subscriber(NewResponse),这也给了我状态码。:)