如何在金字塔中记录重定向?

时间:2014-03-20 16:22:32

标签: python pyramid

我试图对其进行设置,以便我的Pyramid应用会在重定向时记录消息 - 例如当我的一个观点提出HTTPFound时。

创建HTTPFound的自定义子类有效,但是必须确保在应用程序的各个位置都使用该类。

然后,我想到了使用context=HTTPFound创建自定义异常视图,但该视图似乎无法调用。

是否有一种标准方法可以为应用程序的全局重定向设置特殊处理?

1 个答案:

答案 0 :(得分:1)

要注销重定向,您只需要一个检查返回状态的补间,例如:

from wsgiref.simple_server import make_server

from pyramid.config import Configurator
from pyramid.httpexceptions import HTTPFound


def hello1(request):
    raise HTTPFound(request.route_url('hello2'))


def hello2(request):
    return {'boom': 'shaka'}


def redirect_logger(handler, registry):
    def redirect_handler(request):
        response = handler(request)
        if response.status_int == 302:
            print("OMGZ ITS NOT GOING WHERE YOU THINK")

        return response
    return redirect_handler


def main():
    config = Configurator()

    config.add_route('hello1', '/', view=hello1)
    config.add_route('hello2', '/hi', view=hello2, renderer='json')
    config.add_tween('__main__.redirect_logger')

    app = config.make_wsgi_app()
    return app

if __name__ == '__main__':
    app = main()
    server = make_server('0.0.0.0', 8080, app)
    print("http://0.0.0.0:8080")
    server.serve_forever()