我正在看一个Tornado应用程序并想知道如何让它来执行我的用例。我需要在调度到URL处理程序之前拦截每个请求,并可能返回重定向。有没有办法用Tornado做到这一点?
我想知道Tornado是否有类似servlet过滤器的概念。好像input modifier decode_argument
看起来像是这样吗?看起来使用该方法过滤请求会有点麻烦,但我在文档中找不到任何其他内容。
答案 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-middleware或tmiddleware。要小心,因为他们已经3岁了,可能无法工作。但是你总是可以看看他们的代码并从中学习。
答案 1 :(得分:1)