我在看龍捲風應用程序,想知道如何讓它執行我的用例。在調度到URL處理程序之前,我需要攔截每個請求,並可能返回重定向。有沒有辦法使用Tornado來做到這一點?龍捲風:有請求過濾器嗎?
我想知道龍捲風是否有像servlet過濾器的概念。它看起來像input modifierdecode_argument
做這樣的事情?看起來使用該方法過濾請求會有點麻煩,但我還沒有在文檔中找到任何其他內容。
我在看龍捲風應用程序,想知道如何讓它執行我的用例。在調度到URL處理程序之前,我需要攔截每個請求,並可能返回重定向。有沒有辦法使用Tornado來做到這一點?龍捲風:有請求過濾器嗎?
我想知道龍捲風是否有像servlet過濾器的概念。它看起來像input modifierdecode_argument
做這樣的事情?看起來使用該方法過濾請求會有點麻煩,但我還沒有在文檔中找到任何其他內容。
你必須至少人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)
# ...
但要注意的是:
由於龍捲風請求處理可以是異步的,您無法修改中間件中的響應,但您至少可以處理該請求。
使用裝飾。有關如何實現它的詳細信息,請參閱this exaemple。
試試tornado-middleware或tmiddleware。要小心,因爲他們3歲,可能無法工作。但你總是可以看看他們的代碼並從中學習。
嗨,感謝您的回覆。這是可以做到的最好的嗎?好像我需要重寫每個請求處理程序的準備方法。是否沒有全球龍捲風請求過濾器管道? –
@DavidWilliams我認爲你可以定義一個基類繼承RequestHandler – kamushin