我在金字塔中有一个新的请求事件处理程序(订阅服务器),如下所示:
@subscriber(NewRequest)
def new_request_subscriber(event):
request = event.request
print('Opening DB conn')
// Open the DB
request.db = my_connect_to_db()
request.add_finished_callback(close_db_connection)
但是,我观察到,即使请求转到静态资产,到数据库的连接也会打开,这显然是不必要的。在NewRequest处理程序中,是否有一种方法可以检查请求是否绑定到静态资产?我尝试过将视图名称与静态视图名称进行比较,但显然,在处理请求的早期阶段,“视图名称”属性不可用。在
如果有人对此有什么有趣的想法,请告诉我!在
试试这个,我参考休耕网页 http://pyramid.readthedocs.org/en/1.3-branch/api/request.html “设置属性”部分,对我有用。在
暴力方法是将
request.path
变量与静态视图的根(larequest.path.startswith('/static/')
)进行比较。在我最喜欢并在我自己的应用程序中使用的方法是向
request
对象添加一个名为db
的属性,该属性在访问时被延迟计算。因此,虽然您可以将其添加到请求中,但在访问它之前,它不会执行任何操作。在稍后在代码中,您可以访问
request.db()
以获得连接。不幸的是,不可能在运行时向对象添加属性(afaik),因此不能设置它,使request.db
提供所需的内容。您可以通过cookbook entry子类Request
子类并通过Pyramid的@reify
装饰器添加自己的lazy属性,而无需使用订户。在相关问题 更多 >
编程相关推荐