MOMOJI.故事接龙·让我们一起讲故事,做个有故事的人

找到与mvc filter/interceptor类似的机制:tween
 自定义的tween可以被config.add_tween()加入到配置中,从而对request-response处理过程前后加入自己对request和response的处理逻辑;例如,如下是记录每一个请求处理过程消耗时间的一个tween:
 def timing_tween_factory(handler, registry):
     if asbool(registry.settings.get('do_timing')):
         # if timing support is enabled, return a wrapper
         def timing_tween(request):
             start = time.time()
             try:
                 response = handler(request)
             finally:
                 end = time.time()
                 url = request.url
                 log.debug('The request [%s] took %s seconds' % (url,(end - start)) )
             return response
         return timing_tween
     # if timing support is not enabled, return the original
     # handler
     return handler
 在main()函数中,将以上的tween factory注册进来:
 config.add_tween('.tweens.timing_tween_factory')
 并在.ini文件中加入与代码中对应的配置项
 [app:main]
 ...
 do_timing = true
 可以在main()中通过config.add_tween()注册多个tween factory,调用的顺序与注册代码顺序相反(压栈,先进后出),也可以通过此函数的两个kwargs(over=,under=)显性地对tween的执行顺序进行设置,显性设置后与代码顺序无关,其中over=是先于,under=是后于;比如:
 config.add_tween('myapp.tween_factory1', over=pyramid.tweens.MAIN)
 config.add_tween('myapp.tween_factory2', over=pyramid.tweens.MAIN, under='myapp.tween_factory1')
 可以通过ptweens development.ini来查看执行tween链的执行顺序:
 INGRESS (implicit)
 pyramid.tweens.excview_tween_factory (implicit)
 myapp.tween_factory1
 myapp.tween_factory2
 MAIN (implicit)
 
 我想tween可以同mvc中的filter一样类似公共权限检测之类的事情;
  

by 飞~甜 @ 2019-07-06 16:29:55
全文模式 复制地址