Förutsättningar
Innan du tränar på skriptet som visas i denna handledning, var noga med att slutföra följande uppgifter.
- Installera Django version 3+ på Ubuntu 20+ (helst)
- Skapa ett Django-projekt
- Kör Django-servern för att kontrollera om servern fungerar korrekt
Ställ in en Django-app
Kör följande kommando för att skapa en Django-app med namnet socketapp:
$ python3 hantera.py startapp socketappKör följande kommando för att installera kanalen:
$ pip installera kanalerLägg till kanaler och appnamn till INSTALLERAD_APP del av inställningar.py fil:
INSTALLED_APPS = [..
'kanaler',
'socketapp'
]
Definiera värdet av ASGI_APPLICATION i inställningar.py fil:
ASGI_APPLICATION = 'channel_pro.asgi.Ansökan'Skapa en mapp med namnet mallar inuti socketapp mappen och ställ in mallens plats för appen i MALLAR del av inställningar.py fil:
MALLAR = [.. .
'DIRS': ['/ home / fahmida / channel_pro / socketapp / mallar'],
.. .
,
]
Följande utdata visas i terminalen efter att Django-servern har körts. Utgången visar att ASGI / Channels version 3.0.3 är igång.
Skapa en mallfil med namnet index.html på den definierade mallplatsen för att visa data som skickas av WebSocket. Sockelobjektet som skapas med JavaScript läser data med JSON.parse () -metoden, skicka sedan värdet till innehållet i
tagg som innehåller ID-värdet, 'msg.''
index.html
text
Ändra utsikt.py fil för socketapp med följande innehåll. De index.html mallfilen visas i webbläsaren med text variabel när index() metoden för detta skript kallas från webbadresser.py fil. Om inget meddelande överförs från uttaget, då texten 'LinuxHintvisas i webbläsaren.
utsikt.py
# Importera renderingsmodul från Djangofrån django.genvägar importeras
# Skapa indexfunktion för att visa HTML-filen i webbläsaren
def index (begäran):
return render (begäran, "index.html ", context = 'text': 'LinuxHint')
Ändra webbadresser.py fil för socketapp med följande innehåll. Två vägar definieras i skriptet: 'administration/"sökväg används för att öppna Django Administration Dashboard, och"msg /sökvägen används för att läsa WebSocket-meddelandet.
webbadresser.py
från django.bidrag importadministratörfrån django.webbadress för webbadresser
från socketapps importvyer
urlmönster = [
sökväg ('admin /', admin.webbplats.webbadresser),
sökväg ('msg /', vyer.index)
]
När följande URL körs utan att definiera konsument- och routningsfiler fungerar HTTP-protokollet och följande utdata visas.
http: // localhost: 8000 / msg
Skapa nu en konsumenter.py fil inuti socketapp mapp med följande skript. De ansluta() metod av ws_consumer kommer att användas för att acceptera sockelanslutningen, läsa det aktuella tidsvärdet varje sekund och skicka aktuell tid i JSON-format via WebSocket när den här metoden anropas från routningsfilen.
konsumenter.py
# Importera JSON-modulimportera json
# Importera WebsocketConsumer
från kanaler.generisk.websocket importerar WebsocketConsumer
# Importera datetime-modul
från datetime importera datetime
# Importera viloläge
från tid importera sömn
# Definiera konsumentklassen för att skicka informationen via WebsocketConsumer
klass ws_consumer (WebsocketConsumer):
def ansluta (själv):
själv.acceptera()
medan (True):
nu = datetime.nu()
själv.skicka (json.dumpar ('timeValue': nu.strftime ("% H:% M:% S")))
sova (1)
Skapa dirigering.py inuti socketapp mapp med följande skript. 'msg /'sökväg definieras i skriptet för att ringa konsumenten för att skicka data till uttaget.
dirigering.py
från django.webbadress för webbadresserfrån .konsumenter importerar ws_consumer
# Ställ in vägen för att ringa konsumenten
ws_urlpatterns = [
sökväg ('msg /', ws_consumer.as_asgi ())
]
Ändra asgi.py fil med följande skript. Modulerna som krävs för att hantera HTTP- och WebSocket-förfrågningar importeras i skriptet.
asgi.py
# Import os-modulimportera os
# Importera get_asgi_application för att hantera http-protokollet
från django.kärna.asgi importera get_asgi_application
# Importera ProtocolTypeRouter och URLRouter för att ställa in webbsocket-routing
från kanaler.routing import ProtocolTypeRouter, URLRouter
# Importera AuthMiddlewareStack för att hantera websocket
från kanaler.auth importera AuthMiddlewareStack
# Importera webbuttagsrutt
från socketapp.routing import ws_urlpatterns
# Tilldela värde för DJANGO_SETTINGS_MODULE
os.miljö.setdefault ('DJANGO_SETTINGS_MODULE', 'channel_pro.inställningar')
# Definiera applikationsvariabel för att hantera http och websocket
application = ProtocolTypeRouter (
'http': get_asgi_application (),
'websocket': AuthMiddlewareStack (URLRouter (ws_urlpatterns))
)
Kör nu följande URL från webbläsaren igen för att läsa informationen från WebSocket.
http: // localhost: 8000 / msg /
Om konsumenten och routern fungerar korrekt visas följande digitala klocka i webbläsaren. Här har routern skickat WebSocket-begäran med 'msg /väg till konsumenten som har accepterat begäran och skickat data till mallen för att visa den digitala klockan i webbläsaren där det andra värdet för aktuell tid uppdateras varje sekund.
Slutsats
Denna handledning visade dig hur du implementerar en applikation i realtid med Django ramverk och kanaler genom att skapa en enkel digital klocka. Andra typer av realtidsapplikationer kan också implementeras med Django och kanaler, till exempel onlinechatt-system. De manus som används i denna handledning fungerar endast för Django version 3+ och Channel version 3+. Så om du använder en tidigare version av Django eller Channel, måste du uppgradera versionen innan du testar skriptet i denna handledning.