Forudsætninger
Inden du træner scriptet vist i denne vejledning, skal du sørge for at udføre følgende opgaver.
- Installer Django version 3+ på Ubuntu 20+ (helst)
- Opret et Django-projekt
- Kør Django-serveren for at kontrollere, om serveren fungerer korrekt
Opret en Django-app
Kør følgende kommando for at oprette en Django-app med navnet stikkontakt:
$ python3 administrere.py startapp socketappKør følgende kommando for at installere kanalen:
$ pip-installationskanalerFø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
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 Djangofra 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 importadministratorfra 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-modulimport 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 stifra .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-modulimporter 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.