Forutsetninger
Før du trener på 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 med navnet stikkontakt:
$ python3 administrere.py startapp socketappKjør følgende kommando for å installere kanalen:
$ pip installere kanalerLegg til kanalene og appnavnet til INSTALLERT_APP del av innstillinger.py fil:
INSTALLED_APPS = [..
'kanaler',
'socketapp'
]
Definer verdien av ASGI_APPLICATION i innstillinger.py fil:
ASGI_APPLICATION = 'channel_pro.asgi.applikasjon'Opprett en mappe med navnet maler inne i stikkontakt mappen og angi malens plassering av appen i MALER del av innstillinger.py fil:
MALER = [.. .
'DIRS': ['/ home / fahmida / channel_pro / socketapp / templates'],
.. .
,
]
Følgende utdata vises i terminalen etter at du har kjørt Django-serveren. Utgangen viser at ASGI / Channels versjon 3.0.3 kjører.
Opprett en malfil med navnet indeks.html på den definerte malplasseringen for å vise dataene som sendes av WebSocket. Socket-objektet som er opprettet ved hjelp av JavaScript, vil lese dataene ved hjelp av JSON.parse () -metoden, og send deretter verdien til innholdet i
tag som inneholder ID-verdien, 'msg.'
indeks.html
text
Endre utsikt.py fil av stikkontakt med følgende innhold. De indeks.html malfilen vises i nettleseren med tekst variabel når indeks () metoden for dette skriptet kalles fra nettadresser.py fil. Hvis det ikke blir sendt noen melding fra kontakten, blir teksten 'LinuxHintvises i nettleseren.
utsikt.py
# Importer gjengivelsesmodul fra Djangofra django.snarveier import gjengis
# Opprett indeksfunksjon for å vise HTML-filen i nettleseren
def indeks (forespørsel):
return render (forespørsel, "indeks.html ", context = 'text': 'LinuxHint')
Endre nettadresser.py fil av stikkontakt med følgende innhold. To stier er definert i skriptet: 'admin /'sti brukes til å åpne Django Administration Dashboard, og'msg /stien brukes til å lese WebSocket-meldingen.
nettadresser.py
fra django.bidrag importadministratorfra django.URL-adresse for import
fra socketapp-importvisninger
urlpatterns = [
sti ('admin /', admin.nettstedet.nettadresser),
sti ('msg /', visninger.indeks)
]
Når følgende URL kjøres uten å definere forbruker- og rutefiler, vil HTTP-protokollen fungere og følgende utdata vises.
http: // localhost: 8000 / msg
Lag nå en forbrukere.py filen inne i stikkontakt mappe med følgende skript. De koble() Metode av ws_consumer vil bli brukt til å godta stikkontakten, lese gjeldende tidsverdi hvert sekund, og sende gjeldende tid i JSON-format via WebSocket når denne metoden kalles fra rutefilen.
forbrukere.py
# Importer JSON-modulimportere json
# Importer WebsocketConsumer
fra kanaler.generisk.websocket import WebsocketConsumer
# Importer datetime-modul
fra datetime importer datetime
# Importer søvnmodul
fra tid importerer søvn
# Definer forbrukerklassen for å sende dataene gjennom WebsocketConsumer
klasse ws_consumer (WebsocketConsumer):
def connect (selv):
selv-.aksepterer()
mens (True):
nå = datetime.nå()
selv-.send (json.dumps ('timeValue': nå.strftime ("% H:% M:% S")))
sove (1)
Opprett ruting.py inne i stikkontakt mappe med følgende skript. The 'msg /stien er definert i skriptet for å ringe forbrukeren for å sende dataene til kontakten.
ruting.py
fra django.URL-adresse for importfra .forbrukere importerer ws_consumer
# Sett veien for å ringe forbrukeren
ws_urlpatterns = [
bane ('msg /', ws_consumer.as_asgi ())
]
Endre asgi.py filen med følgende skript. Modulene som kreves for å håndtere HTTP- og WebSocket-forespørsler importeres i skriptet.
asgi.py
# Importer os-modulimporter os
# Importer get_asgi_application for å håndtere http-protokollen
fra django.kjerne.asgi import get_asgi_application
# Importer ProtocolTypeRouter og URLRouter for å angi rutingen for websocket
fra kanaler.ruting import ProtocolTypeRouter, URLRouter
# Importer AuthMiddlewareStack for å håndtere websocket
fra kanaler.godkjenne importere AuthMiddlewareStack
# Importer ruting av websokkel
fra socketapp.rutingimport 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
application = ProtocolTypeRouter (
'http': get_asgi_application (),
'websocket': AuthMiddlewareStack (URLRouter (ws_urlpatterns))
)
Kjør nå følgende URL fra nettleseren 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 å bruke 'msg /vei 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 rammeverk og kanaler ved å lage en enkel digital klokke. Andre typer sanntidsapplikasjoner kan også implementeres ved hjelp av Django og kanaler, for eksempel online chattesystemer. Skriptene som brukes i denne opplæringen, fungerer bare for Django versjoner 3+ og Channel versjoner 3+. Så hvis du bruker en tidligere Django- eller Channel-versjon, må du oppgradere versjonen før du tester skriptet som er gitt i denne opplæringen.