Preduvjeti
Prije vježbanja skripte prikazane u ovom vodiču, ispunite sljedeće zadatke.
- Instalirajte Django verzije 3+ na Ubuntu 20+ (po mogućnosti)
- Stvorite Django projekt
- Pokrenite Django poslužitelj kako biste provjerili radi li poslužitelj ispravno
Postavite aplikaciju Django
Pokrenite sljedeću naredbu za stvaranje Django aplikacije s imenom socketapp:
$ python3 upravljanje.py startapp socketappPokrenite sljedeću naredbu da biste instalirali kanal:
$ pip instalacijski kanaliDodajte kanale i naziv aplikacije u INSTALLED_APP dio postavke.py datoteka:
INSTALLED_APPS = [..
'kanali',
'socketapp'
]
Definirajte vrijednost ASGI_APPLICATION u postavke.py datoteka:
ASGI_APPLICATION = 'channel_pro.asgi.prijava 'Stvorite mapu s imenom predlošci unutar socketapp mapu i postavite mjesto predloška aplikacije u PREDLOZI dio postavke.py datoteka:
PREDLOZI = [.. .
'DIRS': ['/ home / fahmida / channel_pro / socketapp / predlošci'],
.. .
,
]
Sljedeći će se izlaz pojaviti u terminalu nakon pokretanja Django poslužitelja. Izlaz pokazuje da je verzija ASGI / Kanali 3.0.3 radi.
Stvorite datoteku predloška s imenom indeks.html na definiranom mjestu predloška za prikaz podataka koje šalje WebSocket. Objekt socket stvoren pomoću JavaScript-a očitat će podatke pomoću JSON-a.parse () metoda, a zatim proslijedite vrijednost u sadržaj
oznaka koja sadrži vrijednost ID, 'msg.'
indeks.html
text
Izmijenite pogleda.py kartoteka socketapp sa sljedećim sadržajem. The indeks.html Datoteka predloška prikazat će se u pregledniku s tekst varijabla kada je indeks() metoda ove skripte poziva se iz url adrese.py datoteka. Ako se iz utičnice ne prenosi poruka, tada se prikazuje tekst 'LinuxHint'prikazat će se u pregledniku.
pogleda.py
# Uvoz modula prikaza iz Djangaiz djanga.prečaci uvoz render
# Stvorite funkciju indeksa za prikaz HTML datoteke u pregledniku
def indeks (zahtjev):
return render (zahtjev, "indeks.html ", context = 'text': 'LinuxHint')
Izmijenite url adrese.py kartoteka socketapp sa sljedećim sadržajem. U skripti su definirane dvije staze: 'admin /'put se koristi za otvaranje nadzorne ploče uprave Django i'poruka /'put se koristi za čitanje poruke WebSocket.
url adrese.py
iz djanga.doprinos uvoz adminiz djanga.put uvoza URL-ova
iz prikaza uvoza socketapp
urlpatterns = [
put ('admin /', admin.web mjesto.URL-ovi),
path ('msg /', prikazi.indeks)
]
Kada se izvrši sljedeći URL bez definiranja potrošača i datoteka usmjeravanja, HTTP protokol će raditi i pojavit će se sljedeći izlaz.
http: // localhost: 8000 / msg
Sada stvorite a potrošači.py datoteka unutar socketapp mapa sa sljedećom skriptom. The Spojiti() metoda ws_consumer koristit će se za prihvaćanje priključka utičnice, čitanje trenutne vrijednosti vremena svake sekunde i slanje trenutnog vremena u JSON formatu putem WebSocket-a kada se ova metoda pozove iz datoteke usmjeravanja.
potrošači.py
# Uvoz JSON modulauvoz json
# Uvoz WebsocketConsumer
s kanala.generički.websocket import WebsocketConsumer
# Uvoz modula za datum i vrijeme
od datetime uvoz datetime
# Uvoz modula spavanja
od vremena uvoz san
# Definirajte klasu potrošača za slanje podataka putem WebsocketConsumer
klasa ws_consumer (WebsocketConsumer):
def povezivanje (samo):
sebe.prihvatiti()
while (True):
sada = datum i vrijeme.sada()
sebe.poslati (json.odlagališta ('timeValue': sada.strftime ("% H:% M:% S")))
spavanje (1)
Stvorite usmjeravanje.py unutar socketapp mapa sa sljedećom skriptom. "poruka /'put je definiran u skripti za pozivanje potrošača radi slanja podataka u utičnicu.
usmjeravanje.py
iz djanga.put uvoza URL-ovaiz .potrošači uvoze ws_consumer
# Postavite put pozivanja potrošača
ws_urlpatterns = [
path ('msg /', ws_consumer.as_asgi ())
]
Izmijenite asgi.py datoteka sa sljedećom skriptom. Moduli koji su potrebni za obradu HTTP i WebSocket zahtjeva uvoze se u skriptu.
asgi.py
# Uvoz os modulauvoz os
# Uvezite get_asgi_application za obradu http protokola
iz djanga.jezgra.asgi uvoz get_asgi_application
# Uvezite ProtocolTypeRouter i URLRouter da biste postavili usmjeravanje websoketa
s kanala.usmjeravanje uvoza ProtocolTypeRouter, URLRouter
# Uvezite AuthMiddlewareStack za obradu web-utičnice
s kanala.auth uvoz AuthMiddlewareStack
# Uvoz websocket usmjeravanja
iz socketappa.usmjeravanje uvoza ws_urlpatterns
# Dodijelite vrijednost za DJANGO_SETTINGS_MODULE
os.okolina.setdefault ('DJANGO_SETTINGS_MODULE', 'channel_pro.postavke ')
# Definirajte varijablu aplikacije za obradu http i websocket
aplikacija = ProtocolTypeRouter (
'http': get_asgi_application (),
'websocket': AuthMiddlewareStack (URLRouter (ws_urlpatterns))
)
Sada ponovo pokrenite sljedeći URL iz preglednika da biste pročitali podatke iz WebSocket-a.
http: // localhost: 8000 / msg /
Ako potrošač i usmjerivač rade ispravno, tada će se sljedeći digitalni sat prikazati u pregledniku. Ovdje je usmjerivač poslao zahtjev WebSocket koristeći 'poruka /'put do potrošača koji je prihvatio zahtjev i poslao podatke u predložak kako bi se prikazao digitalni sat u pregledniku gdje se druga vrijednost trenutnog vremena ažurira svake sekunde.
Zaključak
Ovaj vam je vodič pokazao kako implementirati aplikaciju u stvarnom vremenu pomoću Django okvira i kanala stvaranjem jednostavnog digitalnog sata. Druge vrste aplikacija u stvarnom vremenu također se mogu implementirati pomoću Djanga i kanala, poput internetskih sustava za chat. Skripte korištene u ovom uputstvu rade samo za verzije Django 3+ i Channel 3+. Dakle, ako koristite stariju verziju Django ili Channel, morat ćete nadograditi verziju prije testiranja skripte navedene u ovom vodiču.