擅长:python、mysql、java
<p>暴力方法是将<code>request.path</code>变量与静态视图的根(la<code>request.path.startswith('/static/')</code>)进行比较。在</p>
<p>我最喜欢并在我自己的应用程序中使用的方法是向<code>request</code>对象添加一个名为<code>db</code>的属性,该属性在访问时被延迟计算。因此,虽然您可以将其添加到请求中,但在访问它之前,它不会执行任何操作。在</p>
<pre><code>import types
def get_db_connection(request):
if not hasattr(request, '_db'):
request._db = my_connect_to_db()
request.add_finished_callback(close_db_connection)
return request._db
def new_request_subscriber(event):
request = event.request
request.db = types.MethodType(get_db_connection, request)
</code></pre>
<p>稍后在代码中,您可以访问<code>request.db()</code>以获得连接。不幸的是,不可能在运行时向对象添加属性(afaik),因此不能设置它,使<code>request.db</code>提供所需的内容。您可以通过<a href="http://docs.pylonsproject.org/projects/pyramid_cookbook/dev/authentication.html#making-a-user-object-available-as-a-request-attribute" rel="nofollow">cookbook entry</a>子类<code>Request</code>子类并通过Pyramid的<code>@reify</code>装饰器添加自己的lazy属性,而无需使用订户。在</p>