Pytonorm

Hur man använder Django Channel

Hur man använder Django Channel
Django är ett populärt Python-ramverk som används för att utveckla webbappar med hjälp av WGSI (Web Server Gateway Interface) och ASGI (Asynchronous Server Gateway Interface) serverspecifikationer. WGSI används för att utveckla synkrona Python-appar och AGSI används för att utveckla asynkrona och synkrona webbappar. Kanal är en användbar funktion i Django som används för att hantera WebSocket, chattprotokoll osv. tillsammans med HTTP-protokollet. Kanal bygger på ASGI-serverns specifikationer. En tvåvägs interaktiv kommunikationssession mellan användarens webbläsare och servern kan öppnas med en WebSocket. Klienten initierar WebSocket anslutningen och servern svarar med en acceptera eller stänga meddelande. De WebSocket meddelanden trycks in i kanalen med producenter och skickas till konsumenter som lyssnar på kanalen. Denna handledning visar hur du använder kanaler att hantera WebSocket meddelanden.

Förutsättningar

Innan du tränar på skriptet som visas i denna handledning, var noga med att slutföra följande uppgifter.

Ställ in en Django-app

Kör följande kommando för att skapa en Django-app med namnet socketapp:

$ python3 hantera.py startapp socketapp

Kör följande kommando för att installera kanalen:

$ pip installera kanaler

Lägg till kanaler och appnamn till INSTALLERAD_APP del av inställningar.py fil:

INSTALLED_APPS = [
..
'kanaler',
'socketapp'
]

Definiera värdet av ASGI_APPLICATION i inställningar.py fil:

ASGI_APPLICATION = 'channel_pro.asgi.Ansökan'

Skapa en mapp med namnet mallar inuti socketapp mappen och ställ in mallens plats för appen i MALLAR del av inställningar.py fil:

MALLAR = [

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

Följande utdata visas i terminalen efter att Django-servern har körts. Utgången visar att ASGI / Channels version 3.0.3 är igång.

Skapa en mallfil med namnet index.html på den definierade mallplatsen för att visa data som skickas av WebSocket. Sockelobjektet som skapas med JavaScript läser data med JSON.parse () -metoden, skicka sedan värdet till innehållet i

tagg som innehåller ID-värdet, 'msg.''

index.html





Django Channel Tutorials




text




Ändra utsikt.py fil för socketapp med följande innehåll. De index.html mallfilen visas i webbläsaren med text variabel när index() metoden för detta skript kallas från webbadresser.py fil. Om inget meddelande överförs från uttaget, då texten 'LinuxHintvisas i webbläsaren.

utsikt.py

# Importera renderingsmodul från Django
från django.genvägar importeras
# Skapa indexfunktion för att visa HTML-filen i webbläsaren
def index (begäran):
return render (begäran, "index.html ", context = 'text': 'LinuxHint')

Ändra webbadresser.py fil för socketapp med följande innehåll. Två vägar definieras i skriptet: 'administration/"sökväg används för att öppna Django Administration Dashboard, och"msg /sökvägen används för att läsa WebSocket-meddelandet.

webbadresser.py

från django.bidrag importadministratör
från django.webbadress för webbadresser
från socketapps importvyer
urlmönster = [
sökväg ('admin /', admin.webbplats.webbadresser),
sökväg ('msg /', vyer.index)
]

När följande URL körs utan att definiera konsument- och routningsfiler fungerar HTTP-protokollet och följande utdata visas.

http: // localhost: 8000 / msg

Skapa nu en konsumenter.py fil inuti socketapp mapp med följande skript. De ansluta() metod av ws_consumer kommer att användas för att acceptera sockelanslutningen, läsa det aktuella tidsvärdet varje sekund och skicka aktuell tid i JSON-format via WebSocket när den här metoden anropas från routningsfilen.

konsumenter.py

# Importera JSON-modul
importera json
# Importera WebsocketConsumer
från kanaler.generisk.websocket importerar WebsocketConsumer
# Importera datetime-modul
från datetime importera datetime
# Importera viloläge
från tid importera sömn
# Definiera konsumentklassen för att skicka informationen via WebsocketConsumer
klass ws_consumer (WebsocketConsumer):
def ansluta (själv):
själv.acceptera()
medan (True):
nu = datetime.nu()
själv.skicka (json.dumpar ('timeValue': nu.strftime ("% H:% M:% S")))
sova (1)

Skapa dirigering.py inuti socketapp mapp med följande skript. 'msg /'sökväg definieras i skriptet för att ringa konsumenten för att skicka data till uttaget.

dirigering.py

från django.webbadress för webbadresser
från .konsumenter importerar ws_consumer
# Ställ in vägen för att ringa konsumenten
ws_urlpatterns = [
sökväg ('msg /', ws_consumer.as_asgi ())
]

Ändra asgi.py fil med följande skript. Modulerna som krävs för att hantera HTTP- och WebSocket-förfrågningar importeras i skriptet.

asgi.py

# Import os-modul
importera os
# Importera get_asgi_application för att hantera http-protokollet
från django.kärna.asgi importera get_asgi_application
# Importera ProtocolTypeRouter och URLRouter för att ställa in webbsocket-routing
från kanaler.routing import ProtocolTypeRouter, URLRouter
# Importera AuthMiddlewareStack för att hantera websocket
från kanaler.auth importera AuthMiddlewareStack
# Importera webbuttagsrutt
från socketapp.routing import ws_urlpatterns
# Tilldela värde för DJANGO_SETTINGS_MODULE
os.miljö.setdefault ('DJANGO_SETTINGS_MODULE', 'channel_pro.inställningar')
# Definiera applikationsvariabel för att hantera http och websocket
application = ProtocolTypeRouter (
'http': get_asgi_application (),
'websocket': AuthMiddlewareStack (URLRouter (ws_urlpatterns))
)

Kör nu följande URL från webbläsaren igen för att läsa informationen från WebSocket.

http: // localhost: 8000 / msg /

Om konsumenten och routern fungerar korrekt visas följande digitala klocka i webbläsaren. Här har routern skickat WebSocket-begäran med 'msg /väg till konsumenten som har accepterat begäran och skickat data till mallen för att visa den digitala klockan i webbläsaren där det andra värdet för aktuell tid uppdateras varje sekund.

Slutsats

Denna handledning visade dig hur du implementerar en applikation i realtid med Django ramverk och kanaler genom att skapa en enkel digital klocka. Andra typer av realtidsapplikationer kan också implementeras med Django och kanaler, till exempel onlinechatt-system. De manus som används i denna handledning fungerar endast för Django version 3+ och Channel version 3+. Så om du använder en tidigare version av Django eller Channel, måste du uppgradera versionen innan du testar skriptet i denna handledning.

Bästa kommandoradsspel för Linux
Kommandoraden är inte bara din största allierade när du använder Linux, det kan också vara källan till underhållning eftersom du kan använda den för a...
Bästa Gamepad Mapping Apps för Linux
Om du gillar att spela spel på Linux med en gamepad istället för ett typiskt tangentbord och musinmatningssystem, finns det några användbara appar för...
Användbara verktyg för Linux-spelare
Om du gillar att spela spel på Linux är chansen att du kan ha använt appar och verktyg som Wine, Lutris och OBS Studio för att förbättra spelupplevels...