3

中间层是否存在事件或某种工作,其中请求已经发送给用户,但我们仍然拥有信息,以便我们稍后可以在数据库上做一些事情?

4

2 回答 2

3

正如您可能已经知道的那样,您可以在处理请求 之前执行以下操作: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)
于 2011-02-17T17:04:55.917 回答
1

在 Pylons 中,每个控制器都可以有一个beforeafter方法,您可以定义它们然后在调用控制器方法之前/之后调用。

还有包含控制器调用的 lib/base.py 文件,您可以在其中添加一些自定义代码,但它会在每个请求时被调用,并且如果您的代码产生一些错误可能会很危险。

我不确定在金字塔。

如果您在自定义中间件中执行操作,您将可以访问请求和响应对象,但不能访问其他材料。理论上,您可以解析 .ini 配置以获取 db 设置等,但如果它真的是应用程序的一部分,我会坚持在那里的一个地方。

于 2011-02-16T00:45:38.250 回答