विषय पर बढ़ें

एंडपॉइंट

स्टारलेट में होता है HTTPEndpoint और WebSocketEndpoint कक्षाएं जो HTविधि शेड्यूलिंग और सत्र को संभालने के लिए एक वर्ग-आधारित दृश्य पैटर्न प्रदान करती हैं।

HTसमापन बिंदु

HTTPEndpoint कक्षाओं का उपयोग ASGI अनुप्रयोगों के रूप में किया जा सकता है:

से te.आयात T
te.endसे HTTPEndआयात करें


क्लास ऐप (HTTPEndpoint):
    nc def मिलता है (self, request):
        प्लेनटेक्स्ट रिस्पांस लौटाता है (f "Hello, world!")

यदि आप रूटिंग को संभालने के लिए एक te एप्लिकेशन इंस्टेंस का उपयोग कर रहे हैं, तो आप शेड्यूल कर सकते हैं HTTPEndpoint कक्षा। कक्षा के लिए शेड्यूल करना सुनिश्चित करें, कक्षा का उदाहरण नहीं:

te.से आयात
से te.आयात T
te.endसे HTTPEndआयात करें
स्टारलेट से। रूटिंग आयात मार्ग


कक्षा मुखपृष्ठ (HTTPEndpoint):
    nc def मिलता है (self, request):
        प्लेनटेक्स्ट रिस्पांस लौटाता है (f "Hello, world!")


कक्षा उपयोगकर्ता (HTTPEndpoint):
    nc def मिलता है (self, request):
        उपयोगकर्ता नाम = अनुरोध। path_params ['उपयोगकर्ता नाम']
        प्लेनटेक्स रिटर्न (f "हैलो,{username}")

मार्ग = [
    मार्ग ("/", Homepage),
    रूट ("/{username}", उपयोगकर्ता)
]

ऐप = स्टारलेट (routes = routes)

किसी भी अनुरोध विधि के लिए जो संबंधित हैंडलर के लिए मैप नहीं किया गया है, HTसमापन बिंदु वर्ग "405 विधि की अनुमति नहीं है" प्रतिक्रिया के साथ जवाब देगा।

वेबसॉकेट समापन बिंदु

WebSocketEndpoint एक वर्ग एक ASGI अनुप्रयोग है जो चारों ओर घूमता है WebSocket उदाहरण की कार्यक्षमता एक आवरण प्रदान करती है।

समापन बिंदु उदाहरणों पर उपलब्ध है .scope ASGI कनेक्शन रेंज तक पहुंचें, और इसमें एक संपत्ति है encoding क्रमबद्ध करना on_receive विधि अपेक्षित डेटा को मान्य करती है, और यह संपत्ति वैकल्पिक रूप से सेट की जा सकती है।

एन्कोडिंग प्रकार है:

  • 'json'
  • 'bytes'
  • 'text'

विशिष्ट ASGI संदेश प्रकारों को संभालने के लिए तीन पुनर्लेखन योग्य तरीके हैं:

  • async def on_connect(websocket, **kwargs)
  • async def on_receive(websocket, data)
  • async def on_disconnect(websocket, close_code)

    से te.endआयात End

    क्लास ऐप (WebSoketEndpoint): एन्कोडिंग = 'बाइट्स'

    nc def on_connect (self, websocket):
        प्रतीक्षा करें websocket.()
    
    Ac def on _ प्राप्त करें (self, websocket, data):
        प्रतीक्षा करें websocsend_bytes (b "संदेश:" + डेटा)
    
    Ac def on _ dis(self, websocket, close _ code):
        पास
    

WebSocketEndpoint का उपयोग Starlette एप्लिकेशन क्लास के साथ भी किया जा सकता है:

आयात करें
te.से आयात
से te.endआयात WebSocketEndpoint, HTTPEnd
से te.आयात HT
स्टारलेट से। रूटिंग इम्पोर्ट रूट, वेबसॉकेट रूट


एचटीएमएल = ""
<! CTYhtml>
<html>
    <head>
        <title>चैट करें</title>
    </head>
    <body>
        <h1>चैट</h1>
        <form action="" onsubmit="sendMessage(event)">
            <input type="text" id="messageText" autocomplete="off"/>
            <button>भेजें</button>
        </form>
        <ul id='messages'>
        </ul>
        <script>
            वर ws = नया वेबसॉकेट ("ws://localhost:8000/ws");
            Won= फ़ंक्शन (घटना) }
                वर संदेश = document.elementById ('messages')
                वर संदेश = दस्तावेज। create('li')
                वर सामग्री = document.createTNode (event.data)
                संदेश। उपांग बाल (सामग्री)
                संदेश। एपेंडचाइल्ड (संदेश)
            };
            फ़ंक्शन send(event) }
                वर इनपुट = document.elementById ("messageText")
                W (input.value)
                In.= "
                Event.eventDefault ()
            }
        </script>
    </body>
</html>
"""

कक्षा मुखपृष्ठ (HTTPEndpoint):
    nc def मिलता है (self, request):
        HTप्रतिक्रिया लौटाता है (html)

क्लास इको (WebSoketEndpoint):
    एन्कोडिंग = "पाठ"

    Ac def on _ प्राप्त करें (self, websocket, data):
        प्रतीक्षा करें websocsend_text (f "संदेश पाठ था:{data}")

मार्ग = [
    मार्ग ("/", Homepage),
    ("/ws", Echo)
]

ऐप = स्टारलेट (routes = routes)