Python

Sådan bruges Django Channel

Sådan bruges Django Channel
Django er en populær Python-ramme, der bruges til at udvikle webapps ved hjælp af WGSI (Webserver Gateway-interface) og ASGI (Asynchronous Server Gateway Interface) -serverspecifikationer. WGSI bruges til at udvikle synkrone Python-apps, og AGSI bruges til at udvikle asynkrone og synkrone webapps. Kanal er en nyttig funktion i Django, der bruges til at håndtere WebSocket, chatprotokol osv. ved siden af ​​HTTP-protokollen. Kanal er bygget på ASGI-serverens specifikationer. En tovejs interaktiv kommunikationssession mellem brugerens browser og serveren kan åbnes ved hjælp af en WebSocket. Klienten initierer WebSocket forbindelse og serveren reagerer med en acceptere eller tæt besked. Det WebSocket beskeder skubbes ind i kanalen ved hjælp af producenter og sendt til forbrugere der lytter på kanalen. Denne vejledning viser dig, hvordan du bruger kanaler at håndtere WebSocket Beskeder.

Forudsætninger

Inden du træner scriptet vist i denne vejledning, skal du sørge for at udføre følgende opgaver.

Opret en Django-app

Kør følgende kommando for at oprette en Django-app med navnet stikkontakt:

$ python3 administrere.py startapp socketapp

Kør følgende kommando for at installere kanalen:

$ pip-installationskanaler

Føj kanalerne og appnavnet til INSTALLERET_APP en del af indstillinger.py fil:

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

Definer værdien af ​​ASGI_APPLICATION i indstillinger.py fil:

ASGI_APPLICATION = 'channel_pro.asgi.Ansøgning'

Opret en mappe med navnet skabeloner inde i stikkontakt mappe, og indstil skabelonens placering af appen i MALLER en del af indstillinger.py fil:

MALLER = [

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

Følgende output vises i terminalen efter kørsel af Django-serveren. Outputtet viser, at ASGI / Channels version 3.0.3 kører.

Opret en skabelonfil med navnet indeks.html på den definerede skabelonplacering for at vise de data, der sendes af WebSocket. Socket-objektet, der oprettes ved hjælp af JavaScript, læser dataene ved hjælp af JSON.parse () metode, og send derefter værdien til indholdet af

tag, der indeholder ID-værdien, 'msg.''

indeks.html





Django Channel Tutorials




tekst




Rediger synspunkter.py fil af stikkontakt med følgende indhold. Det indeks.html skabelonfil vises i browseren med tekst variabel, når indeks() metoden til dette script kaldes fra webadresser.py fil. Hvis der ikke sendes nogen meddelelse fra stikkontakten, så vises teksten 'LinuxHint'vises i browseren.

synspunkter.py

# Importer gengivelsesmodul fra Django
fra django.genveje import gengivelse
# Opret indeksfunktion for at vise HTML-filen i browseren
def index (anmodning):
return render (anmodning, "indeks.html ", context = 'text': 'LinuxHint')

Rediger webadresser.py fil af stikkontakt med følgende indhold. To stier er defineret i scriptet: 'admin /'sti bruges til at åbne Django Administration Dashboard, og'msg /'sti bruges til at læse WebSocket-meddelelsen.

webadresser.py

fra django.import importadministrator
fra django.webadresser til import af sti
fra socketapp-importvisninger
urlmønstre = [
sti ('admin /', admin.websted.webadresser),
sti ('msg /', visninger.indeks)
]

Når den følgende URL udføres uden at definere forbruger- og routingsfilerne, fungerer HTTP-protokollen, og følgende output vises.

http: // localhost: 8000 / msg

Opret nu en forbrugere.py fil inde i stikkontakt mappe med følgende script. Det Opret forbindelse() metode til ws_consumer vil blive brugt til at acceptere sokkelforbindelsen, læse den aktuelle tidsværdi hvert sekund og sende den aktuelle tid i JSON-format via WebSocket, når denne metode kaldes fra routing-filen.

forbrugere.py

# Importer JSON-modul
import json
# Importer WebsocketConsumer
fra kanaler.generisk.websocket import WebsocketConsumer
# Importer datetime-modul
fra datetime import datetime
# Importer søvnmodul
fra tidspunktet import søvn
# Definer forbrugerklassen til at sende dataene via WebsocketConsumer
klasse ws_consumer (WebsocketConsumer):
def forbindelse (selv):
selv.acceptere()
mens (Sand):
nu = datetime.nu()
selv.send (json.dumps ('timeValue': nu.strftime ("% H:% M:% S")))
sove (1)

Opret routing.py inde i stikkontakt mappe med følgende script. Det 'msg /'sti er defineret i scriptet for at ringe til forbrugeren til at sende dataene til stikkontakten.

routing.py

fra django.webadresser til import af sti
fra .forbrugere importerer ws_consumer
# Indstil stien til opkald til forbrugeren
ws_urlpatterns = [
sti ('msg /', ws_consumer.as_asgi ())
]

Rediger asgi.py fil med følgende script. De moduler, der kræves til at håndtere HTTP- og WebSocket-anmodninger, importeres i scriptet.

asgi.py

# Import os-modul
importer os
# Importér get_asgi_applikation til håndtering af http-protokol
fra django.kerne.asgi import get_asgi_application
# Importer ProtocolTypeRouter og URLRouter for at indstille routingen til websocket
fra kanaler.routing import ProtocolTypeRouter, URLRouter
# Importer AuthMiddlewareStack til at håndtere websocket
fra kanaler.auth import AuthMiddlewareStack
# Importer routing til websocket
fra socketapp.routing import ws_urlpatterns
# Tildel værdi for DJANGO_SETTINGS_MODULE
os.miljø.setdefault ('DJANGO_SETTINGS_MODULE', 'channel_pro.indstillinger ')
# Definer applikationsvariabel til håndtering af http og websocket
application = ProtocolTypeRouter (
'http': get_asgi_application (),
'websocket': AuthMiddlewareStack (URLRouter (ws_urlpatterns))
)

Kør nu følgende URL fra browseren igen for at læse dataene fra WebSocket.

http: // localhost: 8000 / msg /

Hvis forbrugeren og routeren fungerer korrekt, vises følgende digitale ur i browseren. Her har routeren sendt WebSocket-anmodningen ved hjælp af 'msg /sti til forbrugeren, der har accepteret anmodningen og sendt dataene til skabelonen for at vise det digitale ur i browseren, hvor den anden værdi af det aktuelle tidspunkt opdateres hvert sekund.

Konklusion

Denne tutorial viste dig, hvordan du implementerer en applikation i realtid ved hjælp af Django-rammen og kanaler ved at oprette et simpelt digitalt ur. Andre typer realtidsapplikationer kan også implementeres ved hjælp af Django og kanaler, såsom online chatsystemer. De scripts, der bruges i denne tutorial, fungerer kun for Django version 3+ og Channel version 3+. Så hvis du bruger en tidligere Django- eller Channel-version, skal du opgradere versionen, før du tester scriptet i denne vejledning.

Bedste kommandoliniespil til Linux
Kommandolinjen er ikke kun din største allierede, når du bruger Linux, den kan også være kilde til underholdning, fordi du kan bruge den til at spille...
Bedste apps til Gamepad Mapping til Linux
Hvis du kan lide at spille spil på Linux med en gamepad i stedet for et typisk tastatur- og musesystem, er der nogle nyttige apps til dig. Mange pc-sp...
Nyttige værktøjer til Linux-spillere
Hvis du kan lide at spille spil på Linux, er chancerne for, at du måske har brugt apps og hjælpeprogrammer som Wine, Lutris og OBS Studio for at forbe...