Pogoji
Pred vadbo skripta, prikazanega v tej vadnici, ne pozabite dokončati naslednjih nalog.
- Namestite Django različice 3+ na Ubuntu 20+ (po možnosti)
- Ustvarite projekt Django
- Zaženite strežnik Django, da preverite, ali strežnik deluje pravilno
Nastavite aplikacijo Django
Zaženite naslednji ukaz, da ustvarite aplikacijo Django z imenom socketapp:
$ python3 upravljanje.py startapp socketappZa namestitev kanala zaženite naslednji ukaz:
Kanali za namestitev $ pipDodajte kanale in ime aplikacije v INSTALLED_APP del nastavitve.py mapa:
INSTALLED_APPS = [..
'kanali',
'socketapp'
]
Določite vrednost ASGI_APPLICATION v nastavitve.py mapa:
ASGI_APPLICATION = 'channel_pro.asgi.prijava 'Ustvarite mapo z imenom predloge znotraj socketapp mapo in nastavite lokacijo predloge aplikacije v PREDLOGE del nastavitve.py mapa:
PREDLOGE = [.. .
'DIRS': ['/ home / fahmida / channel_pro / socketapp / predloge'],
.. .
,
]
Naslednji izhod se bo pojavil v terminalu po zagonu strežnika Django. Rezultat kaže, da ASGI / Kanali različice 3.0.3 teče.
Ustvarite datoteko predloge z imenom indeks.html na določeni lokaciji predloge za prikaz podatkov, ki jih pošlje WebSocket. Objekt vtičnice, ustvarjen z uporabo JavaScripta, bo podatke prebral s pomočjo JSON-a.parse (), nato vrednost prenesemo v vsebino
oznaka, ki vsebuje vrednost ID, 'sporoč."
indeks.html
text
Spremenite pogledi.py datoteka socketapp z naslednjo vsebino. The indeks.html Datoteka predloge bo prikazana v brskalniku z besedilo spremenljivka, ko je indeks () metoda tega skripta se pokliče iz URL-ji.py mapa. Če se iz vtičnice ne prenese nobeno sporočilo, se prikaže besedilo 'LinuxHintbo prikazano v brskalniku.
pogledi.py
# Uvozi modul upodabljanja iz Djangaiz djanga.bližnjice uvoz upodabljajo
# Ustvari funkcijo indeksa za prikaz datoteke HTML v brskalniku
indeks def (zahteva):
vrnitev upodabljanja (zahteva, "indeks.html ", context = 'text': 'LinuxHint')
Spremenite URL-ji.py datoteka socketapp z naslednjo vsebino. V skriptu sta opredeljeni dve poti:admin /'pot se uporablja za odpiranje nadzorne plošče za upravljanje Django in'sporočilo /'pot se uporablja za branje sporočila WebSocket.
URL-ji.py
iz djanga.prispevaj uvoz adminiz djanga.pot za uvoz URL-jev
iz pogledov uvoza socketapp
urlpatterns = [
pot ('admin /', admin.spletnem mestu.urls),
pot ('msg /', pogledi.indeks)
]
Ko se naslednji URL izvede brez definiranja porabniških in usmerjevalnih datotek, bo deloval protokol HTTP in prikazal se bo naslednji izhod.
http: // localhost: 8000 / sporoč
Zdaj ustvarite potrošnikov.py v datoteki socketapp mapo z naslednjim skriptom. The povezati () metoda ws_consumer bo uporabljen za sprejem povezave vtičnice, vsako sekundo prebere trenutno vrednost časa in pošlje trenutni čas v obliki JSON prek WebSocket, ko je ta metoda poklicana iz usmerjevalne datoteke.
potrošnikov.py
# Uvozi modul JSONuvoz json
# Uvozi WebsocketConsumer
iz kanalov.generično.uvoz uvoza WebsocketConsumer
# Uvozi modul datuma in časa
od datetime uvoz datumtime
# Uvozi modul spanja
od časa uvoza spanja
# Določite potrošniški razred za pošiljanje podatkov prek WebsocketConsumer
razred ws_consumer (WebsocketConsumer):
def connect (self):
sebe.sprejme ()
while (True):
zdaj = datum in čas.zdaj ()
sebe.pošlji (json.odlagališča ('timeValue': zdaj.strftime ("% H:% M:% S")))
spanje (1)
Ustvari usmerjanje.py znotraj socketapp mapo z naslednjim skriptom. "sporočilo /'pot je definirana v skriptu, da pokliče potrošnika za pošiljanje podatkov v vtičnico.
usmerjanje.py
iz djanga.pot za uvoz URL-jeviz .potrošniki uvozijo ws_consumer
# Nastavite pot za klic potrošnika
ws_urlpatterns = [
pot ('msg /', ws_consumer.as_asgi ())
]
Spremenite asgi.py datoteko z naslednjim skriptom. Moduli, ki so potrebni za obdelavo zahtev HTTP in WebSocket, so uvoženi v skriptu.
asgi.py
# Uvozi os moduluvoz os
# Uvozite get_asgi_application za obdelavo protokola http
iz djanga.jedro.asgi uvoz get_asgi_application
# Uvozite ProtocolTypeRouter in URLRouter, da nastavite usmerjanje spletne povezave
iz kanalov.usmerjanje uvoza ProtocolTypeRouter, URLRouter
# Uvozi AuthMiddlewareStack za obdelavo spletne povezave
iz kanalov.auth uvoz AuthMiddlewareStack
# Uvozi usmerjanje spletne povezave
iz socketapp.usmerjanje uvoza ws_urlpatterns
# Dodelite vrednost za DJANGO_SETTINGS_MODULE
os.okolju.setdefault ('DJANGO_SETTINGS_MODULE', 'channel_pro.nastavitve ')
# Določite aplikacijsko spremenljivko za obdelavo http in websocket
application = ProtocolTypeRouter (
'http': get_asgi_application (),
'websocket': AuthMiddlewareStack (URLRouter (ws_urlpatterns))
)
Zdaj znova zaženite naslednji URL iz brskalnika, da preberete podatke iz WebSocket.
http: // localhost: 8000 / msg /
Če potrošnik in usmerjevalnik delujeta pravilno, bo v brskalniku prikazana naslednja digitalna ura. Tu je usmerjevalnik poslal zahtevo WebSocket z uporabo 'sporočilo /'pot do potrošnika, ki je zahtevo sprejel in podatke poslal v predlogo za prikaz digitalne ure v brskalniku, kjer se druga vrednost trenutnega časa posodablja vsako sekundo.
Zaključek
Ta vadnica vam je pokazala, kako implementirati aplikacijo v realnem času z uporabo ogrodja in kanalov Django z ustvarjanjem preproste digitalne ure. Druge vrste aplikacij v realnem času je mogoče implementirati tudi z uporabo Djanga in kanalov, kot so sistemi za klepet v spletu. Skripti, uporabljeni v tej vadnici, delujejo samo za različice Django 3+ in različice Channel 3+. Torej, če uporabljate starejšo različico Django ali Channel, boste morali različico nadgraditi, preden preizkusite skript, predviden v tej vadnici.