2015-09-28 11 views
6

में कक्षा-आधारित विचार aiohttp लाइब्रेरी में फ़ंक्शंस के बजाय क्लास-आधारित हैंडलर का उपयोग करने का सही तरीका क्या है? मैं Django में कक्षाओं के रूप में हैंडलर लिखने के लिए उपयोग किया जाता हूं, इसलिए मुझे आश्चर्य है कि aiohttp में इसे सही तरीके से कैसे किया जाए?Aiohttp

उत्तर

5

मुझे लगता है कि आप कोड का पुन: उपयोग करने के लिए विरासत लागू करने के लिए कक्षा-आधारित हैंडलर का उपयोग करना चाहते हैं।

तकनीकी रूप से aiohttp वेब-हैंडलर कोई भी कोरआउट है जो अनुरोध पैरामीटर स्वीकार करता है और प्रतिक्रिया उदाहरण देता है।

उदाहरण

class BaseView: 
    def __init__(self, ...): 
     ... 

    @asyncio.coroutine 
    def __call__(self, request): 
     return web.Response() 

app.router.add_route('GET', '/', BaseView(...)) 

के लिए वेब संचालकों पदानुक्रम बनाने के लिए आधार वर्ग के रूप में इस्तेमाल किया जा सकता।

या यहां तक ​​कि

class Handler: 
    def __init__(self, db): 
     self._db = db 

    @asyncio.coroutine 
    def get_from_db(self, data): 
     ... 

    @asyncio.coroutine 
    def handle_a(self, request): 
     data = yield from self.get_from_db(
      self.extract_from_request_a(request)) 
     return web.Response(self.format_data(data)) 

    @asyncio.coroutine 
    def handle_b(self, request): 
     data = yield from self.get_from_db(
      self.extract_from_request_b(request)) 
     return web.Response(self.format_data(data)) 


handler = Handler(db) 
app.router.add_route('GET', '/a', hadndler.handle_a) 
app.router.add_route('GET', '/b', hadndler.handle_b) 
+2

फिर भी विचार उदाहरण के लिए पोस्ट (अनुरोध) समारोह को जोड़ने का तरीका नहीं मिलता है। क्या मुझे यूआरएल – vwvolodya

+0

में उपयोग करने के लिए as_view() विधि को कार्यान्वित करना चाहिए मैंने एक उदाहरण पंजीकृत करने के लिए उदाहरण जोड़ा है। कोड प्रत्येक अनुरोध के लिए बेसव्यू को फिर से नहीं बनाता है - मुझे पता चला है कि आमतौर पर हम 'हैंडल' कक्षा के साथ दृष्टिकोण का उपयोग नहीं करते हैं। –

+1

अद्यतन: एक हालिया संस्करण जोड़ा गया [कक्षा आधारित दृश्य] (https://aiohttp.readthedocs.org/en/stable/web.html#class-based-views)। ध्यान दें कि इसमें जटिलताएं हैं, सभी 'एओ-लिब्स' पूरी तरह से इसका समर्थन नहीं करते हैं – nerdwaller

संबंधित मुद्दे