龙卷风:是否有请求过滤器?

时间:2015-08-25 03:02:51

标签: python filter tornado

我正在看一个Tornado应用程序并想知道如何让它来执行我的用例。我需要在调度到URL处理程序之前拦截每个请求,并可能返回重定向。有没有办法用Tornado做到这一点?

我想知道Tornado是否有类似servlet过滤器的概念。好像input modifier decode_argument看起来像是这样吗?看起来使用该方法过滤请求会有点麻烦,但我在文档中找不到任何其他内容。

2 个答案:

答案 0 :(得分:2)

您至少有3个选项:

  • RequestHandler.prepare()用作kamushin said

  • 正如this tornado issue comment中所述:

      

    实际上你可以连接中间件。 HTTPServer请求处理程序只是可调用对象(实现__call__的函数,方法或对象)。您可以编写自己的处理程序,将请求传递给Application

(实施例)

my_app = tornado.web.Application(...)

def middleware(request):
    # do whatever transformation you want here
    my_app(request)

if __name__ == '__main__':
    http_server = tornado.httpserver.HTTPServer(middleware)
    # ...

但请注意:

  

由于Tornado请求处理可以是异步的,因此您无法修改中间件中的响应,但您至少可以处理请求。

  • 使用装饰器。有关如何实施它的详细信息,请参阅this exaemple

  • 尝试tornado-middlewaretmiddleware。要小心,因为他们已经3岁了,可能无法工作。但是你总是可以看看他们的代码并从中学习。

答案 1 :(得分:1)

您可以使用RequestHandler.prepare()