aiohttp: подавать один статический файл
Как обслуживать один статический файл (вместо целого каталога) с помощью aiohttp?
Статическая подача файлов, похоже, запекается в системе маршрутизации с помощью UrlDispatcher.add_static () , но он обслуживает только целые каталоги.
(я знаю, что в конечном итоге мне придется использовать что-то вроде nginx для обслуживания статических файлов в рабочей среде.)
3 ответа:
В настоящее время нет встроенного способа сделать это; однако есть планы в движении, чтобы добавить эту функцию.
В настоящее время, начиная с версии aiohttp 2.0, самый простой способ вернуть один файл в качестве ответа-использовать недокументированный (?)
FileResponse
объект, инициализированный путем к файлу, напримерfrom aiohttp import web async def index(request): return web.FileResponse('./index.html')
Я написал приложение, которое обрабатывает uri на клиенте (угловой маршрутизатор).
Для обслуживания webapp я использовал немного другую фабрику:
def index_factory(path,filename): async def static_view(request): # prefix not needed route = web.StaticRoute(None, '/', path) request.match_info['filename'] = filename return await route.handle(request) return static_view # json-api app.router.add_route({'POST','GET'}, '/api/{collection}', api_handler) # other static app.router.add_static('/static/', path='../static/', name='static') # index, loaded for all application uls. app.router.add_get('/{path:.*}', index_factory("../static/ht_docs/","index.html"))