Voraussetzungen
Bevor Sie das in diesem Tutorial gezeigte Skript üben, müssen Sie die folgenden Aufgaben ausführen following.
- Installieren Sie Django Version 3+ auf Ubuntu 20+ (vorzugsweise)
- Erstellen Sie ein Django-Projekt
- Führen Sie den Django-Server aus, um zu überprüfen, ob der Server ordnungsgemäß funktioniert
Eine Django-App einrichten
Führen Sie den folgenden Befehl aus, um eine Django-App namens zu erstellen Socketapp:
$ python3 verwalten.py startapp socketappFühren Sie den folgenden Befehl aus, um den Kanal zu installieren:
$ pip Kanäle installierenFügen Sie die Kanäle und den App-Namen hinzu INSTALLED_APP Teil von dem die Einstellungen.py Datei:
INSTALLED_APPS = […
'Kanäle',
'Socketapp'
]
Definieren Sie den Wert von ASGI_APPLICATION im die Einstellungen.py Datei:
ASGI_APPLICATION = 'channel_pro.asgi.Anwendung'Erstellen Sie einen Ordner mit dem Namen Vorlagen innerhalb der Socketapp Ordner und legen Sie den Speicherort der Vorlage für die App im VORLAGEN Teil von dem die Einstellungen.py Datei:
VORLAGEN = [… .
'DIRS': ['/home/fahmida/channel_pro/socketapp/templates'],
… .
,
]
Die folgende Ausgabe wird im Terminal erscheinen, nachdem der Django-Server ausgeführt wurde. Die Ausgabe zeigt, dass ASGI/Channels Version 3.0.3 läuft.
Erstellen Sie eine Vorlagendatei mit dem Namen Index.html am definierten Vorlagenspeicherort, um die vom WebSocket gesendeten Daten anzuzeigen. Das mit JavaScript erstellte Socket-Objekt liest die Daten mit JSON.parse() Methode, dann übergeben Sie den Wert an den Inhalt der
Tag, das den ID-Wert enthält, 'msg.'
Index.html
text
Modifiziere den Ansichten.py Datei der Socketapp mit folgendem Inhalt. Das Index.html Vorlagendatei wird im Browser mit dem Text variabel, wenn die Index() Methode dieses Skripts wird von . aufgerufen URLs.py Datei. Wenn keine Nachricht vom Socket übertragen wird, dann wird der Text 'LinuxHinweis' wird im Browser angezeigt.
Ansichten.py
# Rendermodul von Django importierenvon django.Verknüpfungen importieren rendern
# Indexfunktion erstellen, um die HTML-Datei im Browser anzuzeigen
def-Index (Anfrage):
return render(request, "index.html", context='text': 'LinuxHint')
Modifiziere den URLs.py Datei der Socketapp mit folgendem Inhalt. Im Skript sind zwei Pfade definiert: der 'Administrator/'-Pfad wird verwendet, um das Django-Administrations-Dashboard zu öffnen, und der 'Nachricht/' Pfad wird verwendet, um die WebSocket-Nachricht zu lesen.
URLs.py
von django.contrib import adminvon django.URL-Importpfad
aus SocketApp-Importansichten
URLmuster = [
path('admin/', admin.Seite? ˅.URLs),
path('Nachricht/', Ansichten.Index)
]
Wenn die folgende URL ausgeführt wird, ohne die Consumer- und Routing-Dateien zu definieren, funktioniert das HTTP-Protokoll und die folgende Ausgabe wird angezeigt.
http://localhost:8000/msg
Erstellen Sie nun a Verbraucher.py Datei in der Socketapp Ordner mit folgendem Skript. Das verbinden() Methode von ws_consumer wird verwendet, um die Socket-Verbindung zu akzeptieren, den aktuellen Zeitwert jede Sekunde zu lesen und die aktuelle Zeit im JSON-Format über WebSocket zu senden, wenn diese Methode aus der Routing-Datei aufgerufen wird.
Verbraucher.py
# JSON-Modul importierenjson importieren
# WebsocketConsumer importieren
von Kanälen.generisch.Websocket-Import WebsocketConsumer
# Datetime-Modul importieren
aus datetime importieren datetime
# Schlafmodul importieren
ab zeit importieren schlaf
# Definieren Sie die Consumer-Klasse zum Senden der Daten über WebsocketConsumer
Klasse ws_consumer(WebsocketConsumer):
def verbinden (selbst):
selbst.akzeptieren()
während(wahr):
jetzt = Datum/Uhrzeit.jetzt()
selbst.senden (json.dumps('timeValue': jetzt.strftime("%H:%M:%S")))
schlafen(1)
Erstellen Sie die Routing.py innerhalb der Socketapp Ordner mit folgendem Skript. Das 'Nachricht/' Pfad ist im Skript definiert, um den Consumer zum Senden der Daten an den Socket aufzurufen.
Routing.py
von django.URL-Importpfadvon .Verbraucher importieren ws_consumer
# Legen Sie den Pfad zum Aufrufen des Verbrauchers fest
ws_urlmusterns = [
path('msg/', ws_consumer.as_asgi())
]
Modifiziere den asgi.py Datei mit folgendem Skript. Die für die Verarbeitung von HTTP- und WebSocket-Anfragen erforderlichen Module werden in das Skript importiert.
asgi.py
# OS-Modul importierenImportieren von OS
# Importieren Sie get_asgi_application, um das HTTP-Protokoll zu verarbeiten
von django.Ader.asgi-Import get_asgi_application
# Importieren Sie ProtocolTypeRouter und URLRouter, um das Websocket-Routing festzulegen
von Kanälen.Routing-Import ProtocolTypeRouter, URLRouter
# AuthMiddlewareStack importieren, um Websocket zu verarbeiten
von Kanälen.Auth-Import von AuthMiddlewareStack
# Websocket-Routing importieren
von socketapp.Routing-Import ws_urlpatterns
# Wert für DJANGO_SETTINGS_MODULE zuweisen
os.Umgebung.setdefault('DJANGO_SETTINGS_MODULE', 'channel_pro.die Einstellungen')
# Anwendungsvariable für die Verarbeitung von http und Websocket definieren
application = ProtocolTypeRouter(
'http': get_asgi_application(),
'websocket': AuthMiddlewareStack(URLRouter(ws_urlpatterns))
)
Führen Sie nun die folgende URL im Browser erneut aus, um die Daten aus dem WebSocket zu lesen.
http://localhost:8000/msg/
Wenn Consumer und Router ordnungsgemäß funktionieren, wird die folgende Digitaluhr im Browser angezeigt. Hier hat der Router die WebSocket-Anfrage mit dem 'Nachricht/' Pfad zum Verbraucher, der die Anfrage akzeptiert und die Daten an die Vorlage gesendet hat, um die Digitaluhr im Browser anzuzeigen, wo der zweite Wert der aktuellen Uhrzeit jede Sekunde aktualisiert wird.
Fazit
Dieses Tutorial hat Ihnen gezeigt, wie Sie eine Echtzeitanwendung mit dem Django-Framework und den Kanälen implementieren, indem Sie eine einfache Digitaluhr erstellen. Auch andere Arten von Echtzeitanwendungen können über Django und Kanäle implementiert werden, wie z. B. Online-Chat-Systeme. Die in diesem Tutorial verwendeten Skripte funktionieren nur für Django-Versionen 3+ und Channel-Versionen 3+. Wenn Sie also eine frühere Django- oder Channel-Version verwenden, müssen Sie die Version aktualisieren, bevor Sie das in diesem Tutorial bereitgestellte Skript testen können.