【问题标题】:Post-process request event in Pyramid/PylonsPyramid/Pylons 中的后处理请求事件
【发布时间】:2011-02-15 23:45:54
【问题描述】:

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

【问题讨论】:

    标签: python pylons pyramid


    【解决方案1】:

    您可能已经知道,您可以处理请求之前: 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)
    

    【讨论】:

    • 这就是我想要的,不需要中间层,那就是
    【解决方案2】:

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

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

    我在金字塔中不确定。

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

    【讨论】:

      猜你喜欢
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多