web-dev-qa-db-ja.com

aiohttp:単一の静的ファイルを提供します

aiohttpを使用して(ディレクトリ全体ではなく)単一の静的ファイルを提供する方法は?

静的ファイルの提供は、 rlDispatcher.add_static() を使用してルーティングシステムに組み込まれているようですが、これはディレクトリ全体にのみ提供されます。

(私は、最終的にはnginxのようなものを使用して、実稼働環境で静的ファイルを提供する必要があることを知っています。)

13
Niklas

現在、これを行うための組み込みの方法はありません。ただし、 この機能を追加 に移行する計画があります。

4
Jashandeep Sohi

現在、aiohttpバージョン2.0の時点で、単一のファイルを応答として返す最も簡単な方法は、ファイルへのパスで初期化された、文書化されていない(?)FileResponseオブジェクトを使用することです。

from aiohttp import web

async def index(request):
    return web.FileResponse('./index.html')
14
thmp

クライアント(角度ルーター)で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"))
3
eri