2015-12-06 6 views
6

Wie eine einzelne statische Datei (anstelle eines gesamten Verzeichnisses) mit aiohttp dienen?aiohttp: Dienen einzelne statische Datei

Statische File Serving scheint in das Routing-System mit UrlDispatcher.add_static() gebacken werden, aber dies dient nur ganze Verzeichnisse.

(Ich weiß, dass ich schließlich so etwas wie nginx verwenden sollte statische Dateien in einer Produktionsumgebung zu dienen.)

Antwort

4

Derzeit gibt es keine integrierte Möglichkeit, dies zu tun; Es gibt jedoch Pläne in Bewegung zu add this feature.

1

Ich schrieb App, die uri auf Client (eckigen Router) behandelt.

Webapp dienen verwendet i etwas andere Fabrik: (?)

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")) 
6

Derzeit ab aiohttp Version 2.0, ist der einfachste Weg, um eine einzelne Datei als Antwort auf die Rückkehr ist es, die Menschen ohne Papiere zu verwenden FileResponse Objekt, initialisiert mit dem Pfad zur Datei, z

from aiohttp import web 

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