2015-12-06 14 views
6

Cách phân phối một tệp tĩnh (thay vì toàn bộ thư mục) bằng aiohttp?aiohttp: Cung cấp tệp tĩnh đơn

Phục vụ tệp tĩnh dường như được đưa vào hệ thống định tuyến với UrlDispatcher.add_static(), nhưng điều này chỉ phục vụ toàn bộ thư mục.

(Tôi biết rằng tôi cuối cùng nên sử dụng một cái gì đó giống như nginx để phục vụ các tập tin tĩnh trong một môi trường sản xuất.)

Trả lời

4

Hiện nay không có built-in cách để làm điều này; tuy nhiên, có các kế hoạch được chuyển đến add this feature.

1

Tôi đã viết ứng dụng, xử lý uri trên máy khách (bộ định tuyến góc).

Để phục vụ webapp tôi sử dụng máy hơi khác nhau: (?)

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

Hiện nay, tính đến aiohttp phiên bản 2.0, cách dễ nhất để trả về một tập tin duy nhất như một phản ứng là sử dụng không có giấy tờ FileResponse đối tượng, được khởi tạo với đường dẫn đến tệp, ví dụ

from aiohttp import web 

async def index(request): 
    return web.FileResponse('./index.html') 
Các vấn đề liên quan