中间层是否存在事件或某种工作,其中请求已经发送给用户,但我们仍然拥有信息,以便我们稍后可以在数据库上做一些事情?
2 回答
正如您可能已经知道的那样,您可以在处理请求 之前执行以下操作: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 设置等,但如果它真的是应用程序的一部分,我会坚持在那里的一个地方。