2015-08-25 150 views
0

我在看龍捲風應用程序,想知道如何讓它執行我的用例。在調度到URL處理程序之前,我需要攔截每個請求,並可能返回重定向。有沒有辦法使用Tornado來做到這一點?龍捲風:有請求過濾器嗎?

我想知道龍捲風是否有像servlet過濾器的概念。它看起來像input modifierdecode_argument做這樣的事情?看起來使用該方法過濾請求會有點麻煩,但我還沒有在文檔中找到任何其他內容。

回答

1

您可以使用RequestHandler.prepare()

+0

嗨,感謝您的回覆。這是可以做到的最好的嗎?好像我需要重寫每個請求處理程序的準備方法。是否沒有全球龍捲風請求過濾器管道? –

+1

@DavidWilliams我認爲你可以定義一個基類繼承RequestHandler – kamushin

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) 
    # ... 

但要注意的是:

由於龍捲風請求處理可以是異步的,您無法修改中間件中的響應,但您至少可以處理該請求。

  • 使用裝飾。有關如何實現它的詳細信息,請參閱this exaemple

  • 試試tornado-middlewaretmiddleware。要小心,因爲他們3歲,可能無法工作。但你總是可以看看他們的代碼並從中學習。