是否有中间层的事件或某种工作,请求已经发送给用户,但是我们仍然有信息,以便我们以后可以在数据库上执行操作?
答案 0 :(得分: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)
答案 1 :(得分:1)
在Pylons中,每个控制器都可以有之前和之后的方法,您可以定义在调用控制器方法之前/之后调用的方法。
还有lib / base.py文件,其中包含控制器调用,您可以在那里添加一些自定义代码,但是每次请求都会调用它,如果您的代码产生一些错误,则会很危险。
我不确定金字塔。
如果您在自定义中间件中执行操作,则可以访问请求和响应对象,但不能访问其他材料。理论上你可以解析数据库设置的.ini配置等等,但如果它真的是应用程序的一部分,那么我会坚持到那里。