如何设置“全部捕获”#39;在Python Pyramid中查看以记录静态文件的传入请求?

时间:2013-12-31 18:46:57

标签: python pyramid waitress

出于调试目的,我正在尝试查看从我的html文件中请求的静态文件(css,js,jpg等)文件。我在这里阅读了文档:enter link description here我已经设置了我的配置:

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%的时间我收到此错误:

回溯:     path_info = request._headers.environ ['PATH_INFO'] AttributeError:'NoneType'对象没有属性'environ'

错误似乎集中在我的html文件(如css文件)中的eariler上,而html文件底部的.js文件有时可以正常工作。

所以基本上我不知道我是否接近或完全走错了方向来解决问题。有人知道这样做的正确方法吗?

1 个答案:

答案 0 :(得分:1)

您确定,此路由会成功服务任何请求吗? 实现目标的可能性包括:WSGI中间件,Pyramid Tween或自定义事件订阅者。

自定义订阅者可能是最容易的用户。在创建响应之前调用此订阅者,因此无法知道响应代码,内容等。 要完成此任务,您可以添加请求完成回调或使用其他方法之一。

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