Prerequisiti
Prima di esercitarti con lo script mostrato in questo tutorial, assicurati di completare le seguenti attività.
- Installa Django versione 3+ su Ubuntu 20+ (preferibilmente)
- Crea un progetto Django
- Esegui il server Django per verificare se il server funziona correttamente
Configura un'app Django
Esegui il seguente comando per creare un'app Django denominata socketapp:
$ python3 gestire.py startapp socketappEseguire il seguente comando per installare il canale:
$ pip installa canaliAggiungi i canali e il nome dell'app al INSTALLATA_APP parte di impostazioni.pi file:
INSTALLATE_APPS = […
'canali',
'socket'
]
Definire il valore di ASGI_APPLICATION nel impostazioni.pi file:
ASGI_APPLICATION = 'channel_pro.asgi.applicazione'Crea una cartella denominata modelli dentro il socketapp cartella e imposta la posizione del modello dell'app nel MODELLI parte di impostazioni.pi file:
MODELLI = [… .
'DIRS': ['/home/fahmida/channel_pro/socketapp/templates'],
… .
,
]
Il seguente output apparirà nel terminale dopo aver eseguito il server Django. L'output mostra che ASGI/Channel versione 3.0.3 è in esecuzione.
Crea un file modello chiamato indice.html nella posizione del modello definita per visualizzare i dati inviati dal WebSocket. L'oggetto socket creato utilizzando JavaScript leggerà i dati utilizzando JSON.parse(), quindi passa il valore nel contenuto del
tag che contiene il valore ID, 'msg.'
indice.html
testo
Modifica il visualizzazioni.pi file del socketapp con il seguente contenuto. Il indice.html file modello verrà visualizzato nel browser con il testo variabile quando il indice() il metodo di questo script è chiamato da URL.pi file. Se nessun messaggio viene trasmesso dal socket, il testo 'LinuxSuggerimento'verrà visualizzato nel browser.
visualizzazioni.pi
# Importa il modulo di rendering da Djangoda django.scorciatoie importare rendering
# Crea una funzione indice per visualizzare il file HTML nel browser
def indice (richiesta):
return render(richiesta, "indice.html", contesto='testo': 'LinuxHint')
Modifica il URL.pi file del socketapp con il seguente contenuto. Nello script sono definiti due percorsi: il 'amministratore/' viene utilizzato per aprire il dashboard di amministrazione di Django e il 'messaggio/' percorso viene utilizzato per leggere il messaggio WebSocket.
URL.pi
da django.amministratore di importazione contributida django.percorso di importazione degli URL
dalle viste di importazione di socketapp
patternurl = [
percorso('admin/', admin.luogo.URL),
percorso('msg/', views.indice)
]
Quando il seguente URL viene eseguito senza definire i file consumer e di routing, il protocollo HTTP funzionerà e apparirà il seguente output output.
http://localhost:8000/msg
Ora, crea un consumatori.pi file all'interno del socketapp cartella con il seguente script. Il Collegare() metodo di ws_consumer verrà utilizzato per accettare la connessione socket, leggere il valore dell'ora corrente ogni secondo e inviare l'ora corrente in formato JSON tramite WebSocket quando questo metodo viene chiamato dal file di routing.
consumatori.pi
# Importa modulo JSONimport json
# Importa WebsocketConsumer
dai canali.generico.importazione websocket WebsocketConsumer
# Importa modulo datetime
da datetime import datetime
# Importa il modulo del sonno
dal tempo importa il sonno
# Definire la classe consumer per inviare i dati tramite WebsocketConsumer
class ws_consumer(WebsocketConsumer):
def connettersi (auto):
se stesso.accettare()
mentre (vero):
ora = data e ora.adesso()
se stesso.invia(json.dumps('timeValue': now.strftime("%H:%M:%S")))
dormire(1)
Crea il instradamento.pi dentro il socketapp cartella con il seguente script. Il 'messaggio/'il percorso è definito nello script per chiamare il consumatore per inviare i dati al socket.
instradamento.pi
da django.percorso di importazione degli URLa partire dal .i consumatori importano ws_consumer
# Imposta il percorso per chiamare il consumatore
ws_urlpatterns = [
path('msg/', ws_consumer.as_asgi())
]
Modifica il asgi.pi file con il seguente script. I moduli necessari per gestire le richieste HTTP e WebSocket vengono importati nello script.
asgi.pi
# Importa modulo sistema operativoimportare il sistema operativo
# Importa get_asgi_application per gestire il protocollo http
da django.nucleo.asgi import get_asgi_application
# Import ProtocolTypeRouter e URLRouter per impostare il routing del websocket
dai canali.importazione di routing ProtocolTypeRouter, URLRouter
# Importa AuthMiddlewareStack per gestire websocket
dai canali.auth import AuthMiddlewareStack
# Importa routing websocket
da socketapp.importazione di routing ws_urlpatterns
# Assegna un valore per DJANGO_SETTINGS_MODULE
os.ambiente.setdefault('DJANGO_SETTINGS_MODULE', 'channel_pro.impostazioni')
# Definisci la variabile dell'applicazione per gestire http e websocket
application = ProtocolTypeRouter(
'http': get_asgi_application(),
'websocket': AuthMiddlewareStack(URLRouter(ws_urlpatterns))
)
Ora, esegui nuovamente il seguente URL dal browser per leggere i dati dal WebSocket.
http://localhost:8000/msg/
Se il consumatore e il router funzionano correttamente, nel browser verrà visualizzato il seguente orologio digitale. Qui, il router ha inviato la richiesta WebSocket utilizzando il 'messaggio/' percorso al consumatore che ha accettato la richiesta e ha inviato i dati al template per mostrare l'orologio digitale nel browser dove il secondo valore dell'ora corrente si aggiorna ogni secondo.
Conclusione
Questo tutorial ti ha mostrato come implementare un'applicazione in tempo reale utilizzando il framework e i canali Django creando un semplice orologio digitale. È possibile implementare anche altri tipi di applicazioni in tempo reale utilizzando Django e canali, come i sistemi di chat online. Gli script utilizzati in questo tutorial funzionano solo per Django versioni 3+ e Channel versioni 3+. Quindi, se stai utilizzando una versione precedente di Django o Channel, dovrai aggiornare la versione prima di testare lo script fornito in questo tutorial.