【发布时间】:2011-02-15 23:45:54
【问题描述】:
中间层是否存在事件或某种工作,其中请求已发送给用户,但我们仍然拥有信息,以便我们稍后可以在数据库上做一些事情?
【问题讨论】:
中间层是否存在事件或某种工作,其中请求已发送给用户,但我们仍然拥有信息,以便我们稍后可以在数据库上做一些事情?
【问题讨论】:
您可能已经知道,您可以在处理请求之前: http://docs.pylonsproject.org/projects/pyramid/1.0/narr/events.html#configuring-an-event-listener-imperatively
要处理请求后的内容(不使用中间件),您需要向请求添加完成的回调,如下所示: http://docs.pylonsproject.org/projects/pyramid/1.0/api/request.html#pyramid.request.Request.add_finished_callback
当然,完成的回调只发生在一个请求的范围内。您可以将两者结合起来处理所有请求:
from pyramid.events import NewRequest
def do_something(request):
# do something here
pass
def setup_post_request(event):
event.request.add_finished_callback(do_something)
config.add_subscriber(setup_post_request, NewRequest)
【讨论】:
在 Pylons 中,每个控制器都可以有一个 before 和 after 方法,您可以定义它们然后在调用控制器方法之前/之后调用它们。
还有包含控制器调用的 lib/base.py 文件,您可以在其中添加一些自定义代码,但它会在每次请求时被调用,并且如果您的代码产生一些错误可能会很危险。
我在金字塔中不确定。
如果您在自定义中间件中执行操作,您将可以访问请求和响应对象,但不能访问其他材料。理论上你可以解析 .ini 配置以获取 db 设置等,但如果它真的是应用程序的一部分,我会坚持在那里。
【讨论】: