как использовать сопрограмму в торнадо в качестве глобального обработчика запроса инициализации - PullRequest
0 голосов
/ 14 марта 2019

Я хочу использовать базовый requestHander для получения глобальных аргументов из redis перед всем запросом (GET 、 POST ..) ,, и я использую сопрограмму в торнадо в качестве асинхронного и ожидающего. но я использую aredis для клиента redis-server, и baseHandler не поддерживает использование async в init методе, потому что мне нужно, когда класс super, родительский класс может получить аргументы или запрос был подтвержден в контрольных параметрах от redis.
код, как это.

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)

1 Ответ

0 голосов
/ 14 марта 2019

См. Метод RequestHandler.prepare(). Вы можете создать этот метод в своем подклассе, и он будет вызываться перед каждым методом запроса.

Пример:

class BaseHandler(...):
    async def prepare(self):
       # your code here ...
...