如何在龙卷风中使用协程作为全局初始化请求处理程序
how to use coroutine in tornado as a global initialize request handler
我想在所有请求(GET、POST..)之前使用一个基本的requestHander从redis获取全局参数,并且我在tornado web中使用coroutine作为async&await。但是我使用 aredis 来客户端 redis-server ,并且 baseHandler 不支持在 init 方法中使用异步,因为我需要 Class super parent Class 可以获取参数或者请求已经在redis的check params中得到确认。
像这样的代码。
import aredis
redis_client = aredis.StricRedis('redis://xxxx')
class BaseHandler(tornado.web.requestHander):
def check_request(self):
check_one = await redis_client.get(self.request.body['param'])
if not check_one:
self.finish(dict(msg='refused'))
async def get_params(self):
data = await redis_client.get('xxx')
self.data = data
class UserHander(BaseHander):
async def get(self,*args,**kwargs):
data = self.data
return self.finish(data)
参见RequestHandler.prepare()
方法。你可以在你的子类中创建这个方法,它会在每个请求方法之前被调用。
示例:
class BaseHandler(...):
async def prepare(self):
# your code here ...
我想在所有请求(GET、POST..)之前使用一个基本的requestHander从redis获取全局参数,并且我在tornado web中使用coroutine作为async&await。但是我使用 aredis 来客户端 redis-server ,并且 baseHandler 不支持在 init 方法中使用异步,因为我需要 Class super parent Class 可以获取参数或者请求已经在redis的check params中得到确认。
像这样的代码。
import aredis
redis_client = aredis.StricRedis('redis://xxxx')
class BaseHandler(tornado.web.requestHander):
def check_request(self):
check_one = await redis_client.get(self.request.body['param'])
if not check_one:
self.finish(dict(msg='refused'))
async def get_params(self):
data = await redis_client.get('xxx')
self.data = data
class UserHander(BaseHander):
async def get(self,*args,**kwargs):
data = self.data
return self.finish(data)
参见RequestHandler.prepare()
方法。你可以在你的子类中创建这个方法,它会在每个请求方法之前被调用。
示例:
class BaseHandler(...):
async def prepare(self):
# your code here ...