aiohttpを使用して(ディレクトリ全体ではなく)単一の静的ファイルを提供する方法は?
静的ファイルの提供は、 rlDispatcher.add_static() を使用してルーティングシステムに組み込まれているようですが、これはディレクトリ全体にのみ提供されます。
(私は、最終的にはnginxのようなものを使用して、実稼働環境で静的ファイルを提供する必要があることを知っています。)
現在、これを行うための組み込みの方法はありません。ただし、 この機能を追加 に移行する計画があります。
現在、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"))