Python

Django-kanaal gebruiken

Django-kanaal gebruiken
Django is een populair Python-framework dat wordt gebruikt om web-apps te ontwikkelen met behulp van de WGSI (Web Server Gateway Interface) en ASGI (Asynchrone Server Gateway Interface) serverspecificaties. WGSI wordt gebruikt voor het ontwikkelen van synchrone Python-apps en AGSI wordt gebruikt voor het ontwikkelen van asynchrone en synchrone web-apps. Kanaal is een handige functie van Django die wordt gebruikt om WebSocket, chatprotocol, enz. naast het HTTP-protocol. Channel is gebouwd op de ASGI-serverspecificaties. Een interactieve communicatiesessie in twee richtingen tussen de browser van de gebruiker en de server kan worden geopend met: een WebSocket. De opdrachtgever initieert de WebSocket verbinding en de server reageert met een aanvaarden of dichtbij bericht. De WebSocket berichten worden in het kanaal geduwd met behulp van producenten en verzonden naar de consumenten die op het kanaal luisteren. Deze tutorial laat je zien hoe je kanalen ermee omgaan WebSocket berichten.

Vereisten

Voordat u het script in deze zelfstudie oefent, moet u de volgende taken uitvoeren:.

Een Django-app instellen

Voer de volgende opdracht uit om een ​​Django-app met de naam te maken socketapp:

$ python3 beheren.py startapp socketapp

Voer de volgende opdracht uit om het kanaal te installeren:

$ pip installatiekanalen

Voeg de kanalen en app-naam toe aan de INSTALLED_APP deel van de instellingen.py het dossier:

INSTALLED_APPS = [

'kanalen',
'socketapp'
]

Definieer de waarde van ASGI_APPLICATION in de instellingen.py het dossier:

ASGI_APPLICATION = 'channel_pro'.asgi.toepassing'

Maak een map met de naam Sjablonen binnen in de socketapp map en stel de locatie van de app voor de sjabloon in de SJABLONEN deel van de instellingen.py het dossier:

SJABLONEN = [

… .
'DIRS': ['/home/fahmida/channel_pro/socketapp/templates'],
… .
,
]

De volgende uitvoer verschijnt in de terminal na het uitvoeren van de Django-server:. De output laat zien dat ASGI/Channels versie 3.0.3 loopt.

Maak een sjabloonbestand met de naam inhoudsopgave.html op de gedefinieerde sjabloonlocatie om de gegevens weer te geven die door de WebSocket zijn verzonden. Het socket-object dat is gemaakt met JavaScript, leest de gegevens met behulp van de JSON.parse() methode, geef dan de waarde door aan de inhoud van de

tag die de ID-waarde bevat, 'msg.'

inhoudsopgave.html





Django Channel-tutorials




tekst




Wijzig de keer bekeken.py bestand van de socketapp met de volgende inhoud:. De inhoudsopgave.html sjabloonbestand wordt weergegeven in de browser met de tekst variabel wanneer de inhoudsopgave() methode van dit script wordt aangeroepen vanuit de URL's.py het dossier. Als er geen bericht wordt verzonden vanuit de socket, dan wordt de tekst 'LinuxHint' wordt weergegeven in de browser.

keer bekeken.py

# Importeer de rendermodule van Django
van django.sneltoetsen import render
# Maak een indexfunctie om het HTML-bestand in de browser weer te geven
def index(verzoek):
return render(verzoek, "index.html", context='text': 'LinuxHint')

Wijzig de URL's.py bestand van de socketapp met de volgende inhoud:. In het script zijn twee paden gedefinieerd: de 'beheerder/' pad wordt gebruikt om het Django Administration Dashboard te openen, en de 'bericht/' pad wordt gebruikt om het WebSocket-bericht te lezen.

URL's.py

van django.bijdrage import beheerder
van django.URL-importpad
van socketapp importweergaven
urlpatronen = [
pad('admin/', beheerder.website.URL's),
pad('msg/', weergaven.inhoudsopgave)
]

Wanneer de volgende URL wordt uitgevoerd zonder de consumenten- en routeringsbestanden te definiëren, werkt het HTTP-protocol en verschijnt de volgende uitvoer:.

http://localhost:8000/msg

Maak nu een consumenten.py bestand in de socketapp map met het volgende script. De aansluiten() methode van ws_consumer wordt gebruikt om de socketverbinding te accepteren, de huidige tijdwaarde elke seconde te lezen en de huidige tijd in JSON-indeling te verzenden via WebSocket wanneer deze methode wordt aangeroepen vanuit het routeringsbestand.

consumenten.py

# JSON-module importeren
import json
# WebsocketConsumer importeren
van kanalen.algemeen.websocket importeren WebsocketConsumer
# Datum/tijd-module importeren
van datetime import datetime
# Slaapmodule importeren
van tijd import slaap
# Definieer de consumentenklasse om de gegevens via WebsocketConsumer te verzenden
class ws_consumer(WebsocketConsumer):
def verbinden (zelf):
zelf.aanvaarden()
terwijl (waar):
nu = datumtijd.nu()
zelf.verzenden (json.dumps('timeValue': nu.strftime("%H:%M:%S")))
slapen(1)

Maak de routering.py binnen in de socketapp map met het volgende script. De 'bericht/' pad is gedefinieerd in het script om de consument te bellen voor het verzenden van de gegevens naar de socket.

routering.py

van django.URL-importpad
van .consumenten importeren ws_consumer
# Stel het pad in om de consument te bellen
ws_urlpatterns = [
pad('msg/', ws_consumer.as_asgi())
]

Wijzig de asgi.py bestand met het volgende script. De modules die nodig zijn om HTTP- en WebSocket-verzoeken af ​​te handelen, worden geïmporteerd in het script.

asgi.py

# Importeer os-module
importeer os
# Importeer get_asgi_application om het http-protocol te verwerken
van django.kern.asgi import get_asgi_application
# Importeer ProtocolTypeRouter en URLRouter om de websocket-routering in te stellen
van kanalen.routering importeren ProtocolTypeRouter, URLRouter
# AuthMiddlewareStack importeren om websocket af te handelen
van kanalen.auth importeren AuthMiddlewareStack
# Websocket-routing importeren
van socketapp.routering importeren ws_urlpatterns
# Waarde toewijzen voor DJANGO_SETTINGS_MODULE
os.omgeving.setdefault('DJANGO_SETTINGS_MODULE', 'channel_pro'.instellingen')
# Definieer applicatievariabele om http en websocket te verwerken
applicatie = ProtocolTypeRouter(
'http': get_asgi_application(),
'websocket': AuthMiddlewareStack(URLRouter(ws_urlpatterns))
)

Voer nu de volgende URL opnieuw uit vanuit de browser om de gegevens van de WebSocket te lezen:.

http://localhost:8000/msg/

Als de consument en router goed werken, wordt de volgende digitale klok in de browser weergegeven:. Hier heeft de router het WebSocket-verzoek verzonden met de 'bericht/' pad naar de consument die het verzoek heeft geaccepteerd en de gegevens naar de sjabloon heeft verzonden om de digitale klok in de browser te tonen waar de tweede waarde van de huidige tijd elke seconde wordt bijgewerkt.

Conclusie

Deze tutorial liet je zien hoe je een realtime applicatie implementeert met behulp van het Django-framework en kanalen door een eenvoudige digitale klok te maken. Andere soorten realtime applicaties kunnen ook worden geïmplementeerd met behulp van Django en kanalen, zoals online chatsystemen. De scripts die in deze tutorial worden gebruikt, werken alleen voor Django-versies 3+ en Channel-versies 3+. Dus als je een eerdere Django- of Channel-versie gebruikt, moet je de versie upgraden voordat je het script in deze tutorial test.

Beste opdrachtregelspellen voor Linux
De opdrachtregel is niet alleen je grootste bondgenoot bij het gebruik van Linux, hij kan ook de bron van entertainment zijn omdat je hem kunt gebruik...
Beste gamepad-toewijzingsapps voor Linux
Als je graag games op Linux speelt met een gamepad in plaats van een typisch toetsenbord- en muisinvoersysteem, zijn er enkele handige apps voor jou. ...
Handige hulpmiddelen voor Linux-gamers
Als je graag games op Linux speelt, is de kans groot dat je apps en hulpprogramma's zoals Wine, Lutris en OBS Studio hebt gebruikt om de game-ervaring...