2015-12-06 9 views
6

aiohttp का उपयोग कर एक एकल स्थिर फ़ाइल (संपूर्ण निर्देशिका के बजाय) कैसे सेवा करें?aiohttp: एकल स्थिर फ़ाइल की सेवा करें

स्टेटिक फ़ाइल सेवा UrlDispatcher.add_static() के साथ रूटिंग सिस्टम में बेक लगती है, लेकिन यह केवल संपूर्ण निर्देशिकाओं को सेवा प्रदान करती है।

(मुझे पता है कि मैं अंत में nginx की तरह कुछ का उपयोग करना चाहिए उत्पादन परिवेश में स्टैटिक फ़ाइलें सेवा करने के लिए।)

उत्तर

4

इस समय वहाँ ऐसा करने का कोई अंतर्निहित रास्ता है; हालांकि, add this feature पर गति की योजनाएं हैं।

1

मैंने ऐप लिखा, जो क्लाइंट (कोणीय राउटर) पर यूरी को संभालता है।

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

वर्तमान में, aiohttp संस्करण 2.0 के रूप में, एक प्रतिक्रिया के रूप में एक एकल फ़ाइल वापस जाने के लिए सबसे आसान तरीका है अप्रलेखित FileResponse वस्तु का उपयोग करना है, फ़ाइल के पथ के साथ शुरू किया, उदाहरण के लिए

from aiohttp import web 

async def index(request): 
    return web.FileResponse('./index.html') 
संबंधित मुद्दे