Hvordan bruke Django Channel

Hvordan bruke Django Channel
Django er et populært Python -ramme som brukes til å utvikle webapper ved hjelp av WGSI (Web Server Gateway -grensesnittet) og Asgi (Asynkron server gateway grensesnitt) Serverspesifikasjoner. WGSI brukes til å utvikle synkrone Python -apper, og AGSI brukes til å utvikle asynkrone og synkrone webapper. Kanal er et nyttig trekk ved Django som brukes til å håndtere websocket, chat -protokoll osv. ved siden av HTTP -protokollen. Kanalen er bygget på ASGI -serverspesifikasjonene. En toveis interaktiv kommunikasjonsøkt mellom brukerens nettleser og serveren kan åpnes ved hjelp av en websocket. Klienten setter i gang Websocket tilkobling og serveren svarer med en aksepterer eller Lukk beskjed. De Websocket meldinger skyves inn i kanalen ved hjelp av produsenter og sendt til forbrukere som lytter på kanalen. Denne opplæringen viser deg hvordan du bruker kanaler å håndtere Websocket meldinger.

Forutsetninger

Før du øver skriptet som vises i denne opplæringen, må du fullføre følgende oppgaver.

  • Installer Django versjon 3+ på Ubuntu 20+ (helst)
  • Lag et Django -prosjekt
  • Kjør Django -serveren for å sjekke om serveren fungerer som den skal

Sett opp en Django -app

Kjør følgende kommando for å opprette en Django -app som heter socketapp:

$ Python3 Administrer.py startapp socketapp

Kjør følgende kommando for å installere kanalen:

$ pip installer kanaler

Legg til kanalene og appnavnet til Installert_app del av Innstillinger.py fil:

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

Definer verdien av ASGI_Application i Innstillinger.py fil:

ASGI_Application = 'Channel_Pro.Asgi.applikasjon'

Opprett en mappe som heter Maler inne i socketapp mappe og angi malens plassering av appen i Maler del av Innstillinger.py fil:

Maler = [

.. .
'Dirs': ['/home/fahmida/channel_pro/socketapp/maler'],
.. .
,
]

Følgende utgang vises i terminalen etter å ha kjørt Django -serveren. Utgangen viser at ASGI/kanaler versjon 3.0.3 kjører.

Opprett en malfil som heter indeks.html på den definerte malstedet for å vise dataene som er sendt av websocket. Socketobjektet som er opprettet ved hjelp av JavaScript vil lese dataene ved hjelp av JSON.parse () -metode, og deretter gi verdien inn i innholdet i

Tag som inneholder ID -verdien, 'MSG.'

indeks.html





Django Channel Tutorials




text




Endre utsikt.py fil av socketapp Med følgende innhold. De indeks.html Malfilen vises i nettleseren med tekst variabel når indeks () metode for dette skriptet kalles fra URLS.py fil. Hvis ingen melding overføres fra stikkontakten, så er teksten 'Linuxhint'vil vises i nettleseren.

utsikt.py

# Import Render Module fra Django
Fra Django.snarveier import gjengivelse
# Opprett indeksfunksjon for å vise HTML -filen i nettleseren
def indeks (forespørsel):
Retur Render (forespørsel, "Indeks.html ", kontekst = 'tekst': 'linuxhint')

Endre URLS.py fil av socketapp Med følgende innhold. To stier er definert i manuset: 'admin/'Sti brukes til å åpne Django Administration Dashboard, og'msg/'Sti brukes til å lese websocket -meldingen.

URLS.py

Fra Django.bidra importadministrator
Fra Django.URLS importerer bane
fra socketapp importvisninger
urlpatterns = [
bane ('admin/', admin.nettstedet.URL),
bane ('msg/', visninger.indeks)
]

Når følgende URL utføres uten å definere forbruker- og rutingsfiler, vil HTTP -protokollen fungere, og følgende utdata vises.

http: // localhost: 8000/msg

Nå, lage en forbrukere.py fil inne i socketapp mappe med følgende skript. De koble() Metode av ws_consumer vil bli brukt til å akseptere sokkelforbindelsen, lese gjeldende tidsverdi hvert sekund og sende gjeldende tid i JSON -format via WebSocket når denne metoden kalles fra rutingsfilen.

forbrukere.py

# Importer JSON -modul
Importer JSON
# Importer WebSocketConsumer
fra kanaler.generisk.WebSocket Import WebSocketConsumer
# Importer DateTime Module
fra DateTime Import DateTime
# Importer søvnmodul
Fra tid importer søvn
# Definer forbrukerklassen for å sende dataene via WebSocketConsumer
Klasse WS_Consumer (WebSocketConsumer):
def connect (self):
selv-.aksepterer()
mens (sant):
Nå = DateTime.nå()
selv-.Send (JSON.dumper ('timevalue': nå.strftime ("%h:%m:%s")))
søvn (1)

Opprett ruting.py inne i socketapp mappe med følgende skript. 'msg/'Stien er definert i skriptet for å ringe forbrukeren for å sende dataene til kontakten.

ruting.py

Fra Django.URLS importerer bane
fra .Forbrukere importerer ws_consumer
# Angi banen for å ringe forbrukeren
ws_urlpatterns = [
sti ('msg/', ws_consumer.as_asgi ())
]

Endre Asgi.py fil med følgende skript. Modulene som kreves for å håndtere HTTP- og websocket -forespørsler importeres i skriptet.

Asgi.py

# Importer OS -modul
Importer OS
# Import get_asgi_application for å håndtere http -protokoll
Fra Django.kjerne.ASGI import get_asgi_application
# Importer protokolyperuter og urlrouter for å angi ruting av websocket
fra kanaler.ruting import protokolyperuter, urlrouter
# Import AuthMiddlewarestack for å håndtere websocket
fra kanaler.Auth Import AuthMiddlewarestack
# Import WebSocket Routing
fra socketapp.ruting import ws_urlpatterns
# Tildel verdi for Django_Settings_Module
OS.miljø.setDefault ('django_settings_module', 'Channel_pro.innstillinger ')
# Definer applikasjonsvariabel for å håndtere HTTP og WebSocket
applikasjon = protocolTyPeruter (
'http': get_asgi_application (),
'WebSocket': AuthMiddleWarestack (Urlrouter (WS_URLPATTERNS))
)

Kjør nå følgende URL fra nettleseren igjen for å lese dataene fra websocket.

http: // localhost: 8000/msg/

Hvis forbrukeren og ruteren fungerer som den skal, vises følgende digitale klokke i nettleseren. Her har ruteren sendt websocket -forespørselen ved hjelp av 'msg/'Bane til forbrukeren som har akseptert forespørselen og sendt dataene til malen for å vise den digitale klokken i nettleseren der den andre verdien av gjeldende tid oppdateres hvert sekund.

Konklusjon

Denne opplæringen viste deg hvordan du implementerer en sanntidsapplikasjon ved hjelp av Django-rammeverket og kanalene ved å lage en enkel digital klokke. Andre typer sanntidsapplikasjoner kan også implementeres ved hjelp av Django og kanaler, for eksempel nettpratsystemer. Skriptene som brukes i dette opplæringsarbeidet for Django -versjoner 3+ og kanalversjoner 3+. Så hvis du bruker en tidligere Django- eller kanalversjon, må du oppgradere versjonen før du tester skriptet som er gitt i denne opplæringen.