I assume that you want to use class-based handlers to apply inheritance to reuse code.
Technically, the aiohttp web handler is any coroutine that accepts a request parameter and returns an instance of the response.
for instance
class BaseView: def __init__(self, ...): ... @asyncio.coroutine def __call__(self, request): return web.Response() app.router.add_route('GET', '/', BaseView(...))
can be used as a base class to create a hierarchy of web handlers.
Or even
class Handler: def __init__(self, db): self._db = db @asyncio.coroutine def get_from_db(self, data): ... @asyncio.coroutine def handle_a(self, request): data = yield from self.get_from_db( self.extract_from_request_a(request)) return web.Response(self.format_data(data)) @asyncio.coroutine def handle_b(self, request): data = yield from self.get_from_db( self.extract_from_request_b(request)) return web.Response(self.format_data(data)) handler = Handler(db) app.router.add_route('GET', '/a', hadndler.handle_a) app.router.add_route('GET', '/b', hadndler.handle_b)
source share