Python 2.7 如何为tornado编写中间件?
在我的tornado应用程序中,对处理程序的每个请求都需要在处理请求之前检查并验证密钥。 如何在Tornado中创建一个中间件类,在if处理请求之前检查并验证密钥 我的中间件类函数看起来像这样Python 2.7 如何为tornado编写中间件?,python-2.7,tornado,middleware,Python 2.7,Tornado,Middleware,在我的tornado应用程序中,对处理程序的每个请求都需要在处理请求之前检查并验证密钥。 如何在Tornado中创建一个中间件类,在if处理请求之前检查并验证密钥 我的中间件类函数看起来像这样 class Checker(object): def process_request(self, request): try: key = request.META['HTTP_X_KEY'] except KeyError:
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)
可以使用decorator:
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):
...
可以使用decorator:
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):
...
实际上,您可以连接中间件。HTTPServer请求处理程序只是可调用的对象(函数、方法或实现
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu调用
的对象)。您可以编写自己的处理程序,将请求传递给应用程序:
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请求处理可以是异步的,所以您不能修改中间件中的响应,但至少可以处理请求。实际上,您可以连接中间件。HTTPServer请求处理程序只是可调用的对象(函数、方法或实现
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu调用
的对象)。您可以编写自己的处理程序,将请求传递给应用程序:
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请求处理可以是异步的,因此您不能修改中间件中的响应,但至少可以处理请求。当您需要处理所有请求时,装饰器方法没有多大帮助当您需要处理所有请求时,装饰器方法没有多大帮助