1

私の竜巻アプリのハンドラーへのすべてのリクエストは、リクエストを処理する前にキーを確認して検証する必要があります。リクエストを処理する前にキーをチェックして検証するミドルウェア クラスを Tornado で作成するにはどうすればよいですか?

私のミドルウェア クラス関数は次のようになります。

class Checker(object):

    def process_request(self, request):
        try:
            key = request.META['HTTP_X_KEY']
        except KeyError:
            key = None

        if key and key == os.environ.get('KEY'):
            #Process the request
            return None
        #Redirect to Home Page
        return HttpResponsePermanentRedirect('http://google.com', status=301)
4

2 に答える 2

4

デコレータを使用することが可能です:

from functools import wraps
def check_key(f):
    @wraps(f)
    def wrapper(self, request):
        try:
            key = request.META['HTTP_X_KEY']
        except KeyError:
            key = None
        if key and key == os.environ.get('KEY'):
            #Process the request
            f(self, request)
            return None
        #Redirect to Home Page
        return HttpResponsePermanentRedirect('http://google.com', status=301)
    return wrapper

class Checker(object):
   @check_key
   def process_request(self, request):
      ...
于 2013-06-02T19:11:03.810 に答える
1

実際、ミドルウェアを接続できます。HTTPServer リクエスト ハンドラは、単なる呼び出し可能なオブジェクト (関数、メソッド、または を実装するオブジェクト__call__) です。アプリケーションにリクエストを渡す独自のハンドラーを作成できます。

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 のリクエスト処理は非同期になる可能性があるため、ミドルウェアでレスポンスを変更することはできませんが、少なくともリクエストを処理することはできます。

于 2018-03-30T08:36:50.857 に答える