Eeldused
Enne selles õpetuses näidatud skripti harjutamist täitke kindlasti järgmised ülesanded.
- Installige Django versioon 3+ Ubuntu 20+ (eelistatult)
- Looge Django projekt
- Käivitage Django server, et kontrollida, kas server töötab korralikult
Seadistage Django rakendus
Django nimelise rakenduse loomiseks käivitage järgmine käsk socketapp:
$ python3 hallata.py startapp socketappKanali installimiseks käivitage järgmine käsk:
$ pip installikanalidLisage kanalile kanalid ja rakenduse nimi INSTALLED_APP osa seaded.py fail:
INSTALLED_APPS = […
"kanalid",
'socketapp'
]
Määrake jaotises ASGI_APPLICATION väärtus seaded.py fail:
ASGI_APPLICATION = 'kanal_pro.asgi.taotlus 'Looge kaust nimega mallid sees socketapp kausta ja määrake rakenduses malli asukoht MALLID osa seaded.py fail:
MALLID = [… .
'DIRS': ['/ home / fahmida / channel_pro / socketapp / templates'],
… .
,
]
Järgmine väljund ilmub terminalis pärast Django serveri käivitamist. Väljund näitab, et ASGI / Channels versioon 3.0.3 töötab.
Looge mallifail nimega indeks.HTML määratletud malli asukohas WebSocket'i saadetud andmete kuvamiseks. JavaScripti abil loodud sokliobjekt loeb andmeid JSON-i abil.parse () meetod, seejärel edastage väärtus
silt, mis sisaldab ID-väärtust 'msg."
indeks.HTML
text
Muutke vaated.py faili socketapp järgmise sisuga. The indeks.HTML mallifail kuvatakse brauseris koos teksti muutuja, kui indeks () Selle skripti meetodit kutsutakse URL-id.py faili. Kui pistikupesast ei edastata ühtegi teadet, kuvatakse tekstLinuxi vihje'kuvatakse brauseris.
vaated.py
# Impordi renderdusmoodul Djangostalates django.otseteed impordi renderdamine
# Loo indeksfunktsioon HTML-faili kuvamiseks brauseris
def indeks (taotlus):
tagastage renderdamine (taotlus, indeks.html ", context = 'text': 'LinuxHint')
Muutke URL-id.py faili socketapp järgmise sisuga. Skriptis on määratletud kaks rada:admin /'teed kasutatakse Django administratsiooni juhtpaneeli avamiseks ja'sõnum /'teed kasutatakse WebSocket'i sõnumi lugemiseks.
URL-id.py
alates django.kaastöö impordi adminalates django.URL-ide importimise tee
socketapp-i impordivaadetest
urlpatterns = [
tee ('admin /', admin.sait.URL-id),
tee ('msg /', vaated.indeks)
]
Kui järgmine URL täidetakse ilma tarbija ja marsruutimisfaile määratlemata, töötab HTTP-protokoll ja kuvatakse järgmine väljund.
http: // localhost: 8000 / msg
Nüüd looge a tarbijatele.py faili sees socketapp kaust järgmise skriptiga. The ühendama () meetod ws_tarbija kasutatakse sokliühenduse aktsepteerimiseks, iga sekundi praeguse ajaväärtuse lugemiseks ja praeguse aja saatmiseks WebSocket'i kaudu JSON-vormingus, kui marsruutimisfailist seda meetodit kutsutakse.
tarbijatele.py
# Importige JSON-moodulimport json
# Impordi WebsocketConsumer
kanalitest.üldine.veebipesa importimine WebsocketConsumer
# Impordi kuupäevaaja moodul
alates datetime impordi datetime
# Impordi unemoodul
ajast impordi uni
# Määratlege tarbijaklass andmete saatmiseks WebsocketConsumer kaudu
klass ws_consumer (WebsocketConsumer):
def connect (ise):
ise.nõustu ()
samas (tõene):
nüüd = kuupäevaeg.nüüd ()
ise.saada (json.prügimäed ('timeValue': nüüd.algusaeg ("% H:% M:% S"))
magama (1)
Looge marsruutimine.py sees socketapp kaust järgmise skriptiga. "sõnum /'skriptis on määratletud tee, et helistada tarbijale andmete pesasse saatmiseks.
marsruutimine.py
alates django.URL-ide importimise teealates .tarbijad impordivad ws_consumer
# Määrake tarbijale helistamise tee
ws_urlpatterns = [
tee ('msg /', ws_tarbija.as_asgi ()
]
Muutke asgi.py fail järgmise skriptiga. HTTP- ja WebSocket-päringute töötlemiseks vajalikud moodulid imporditakse skripti.
asgi.py
# OS-i mooduli importimineimpordi os
# Importige get_asgi_application http-protokolli käsitsemiseks
alates django.tuum.asgi import get_asgi_rakendus
# Veebipesa marsruutimise määramiseks importige ProtocolTypeRouter ja URLRouter
kanalitest.marsruudi importimine ProtocolTypeRouter, URLRouter
# Veebipesa käsitsemiseks importige AuthMiddlewareStack
kanalitest.Autent importib AuthMiddlewareStacki
# Impordi veebipesa marsruutimine
socketappist.marsruutimine import ws_urlpatterns
# Määra väärtusele DJANGO_SETTINGS_MODULE
os.keskkond.setdefault ('DJANGO_SETTINGS_MODULE', 'kanal_pro.seaded ')
# Määratlege rakenduse muutuja, mis haldab httpi ja veebipesa
rakendus = ProtocolTypeRouter (
'http': get_asgi_application (),
'websocket': AuthMiddlewareStack (URLRouter (ws_urlpatterns))
)
Nüüd käivitage brauseris järgmine URL, et lugeda andmeid WebSocketist.
http: // localhost: 8000 / msg /
Kui klient ja ruuter töötavad korralikult, kuvatakse brauseris järgmine digitaalkell. Siin on ruuter saatnud WebSocket-i päringu, kasutadessõnum /'tee selle tarbija juurde, kes on päringu vastu võtnud ja saatnud andmed mallile, et näidata digitaalset kella brauseris, kus praeguse aja teist väärtust värskendatakse iga sekundi järel.
Järeldus
See õpetus näitas teile, kuidas rakendada reaalajas rakendust Django raamistiku ja kanalite abil, luues lihtsa digitaalse kella. Django ja kanalite abil saab rakendada ka muud tüüpi reaalajas rakendusi, näiteks veebivestlussüsteeme. Selles õpetuses kasutatud skriptid töötavad ainult Django versioonidele 3+ ja Channel versioonidele 3+. Niisiis, kui kasutate varasemat Django või Kanali versiooni, peate enne selles õpetuses pakutava skripti testimist versiooni täiendama.