1
私のaiohttpミドルウェアは、ルートに渡されたバインドされたメソッドではなく、パラメータとして機能を取得します。この行動を説明するには?それを避ける方法は?ハンドラはクラスに編成され、経路に渡された場合はaiohttpは暗黙的に私のメソッドを機能させます
class AsyncHttpServer:
def __init__(self, host=None, port=None, loop=None, conf_path=None):
self.loop = loop
self.conf_path = conf_path
self.host = host
self.port = port
self.loop = loop
self.app = web.Application(
middlewares=[
preprocess_request,
]
)
def serve_forever(self):
with RequestHandler(self.conf_path) as handler:
print(handler.search) # bound method 'search'. Instance is irrelevant
self.app.router.add_routes([
web.post('/search', handler.search, name='search'),
])
try:
web.run_app(self.app, port=self.port, host=self.host, loop=self.loop)
except KeyboardInterrupt:
pass
@asyncio.coroutine
@middleware
def preprocess_request(request, handler):
print(handler) # function 'search'
これはasyncio.coroutineの動作方法です。 –
あなたはaiohttpが援助なしにコルーチンのデコレータにミドルウェアをラップすることを意味しますか?私はあなたの貢献に対して「ありがとう」と言う機会をとる。 – VadimFilin
あなたの例を見てください。 '@ asyncio.coroutine'デコレータで' preprocess_request'を明示的にラップしました。 –