Cómo usar el canal Django

Cómo usar el canal Django
Django es un marco popular de Python utilizado para desarrollar aplicaciones web utilizando el WGSI (Interfaz de puerta de enlace del servidor web) y Asgi (Interfaz de puerta de enlace del servidor asíncrono) Especificaciones del servidor. WGSI se utiliza para desarrollar aplicaciones síncronas de Python, y AGSI se utiliza para desarrollar aplicaciones web asincrónicas y sincrónicas. Canal es una característica útil de Django que se utiliza para manejar WebSocket, Protocolo de chat, etc. junto con el protocolo HTTP. El canal se basa en las especificaciones del servidor ASGI. Se puede abrir una sesión de comunicación interactiva bidireccional entre el navegador del usuario y el servidor utilizando un websocket. El cliente inicia el Websocket conexión y el servidor responde con un aceptar o cerca mensaje. El Websocket Los mensajes se empujan al canal usando productores y enviado al consumidores que están escuchando en el canal. Este tutorial te muestra cómo usar canales manejar Websocket mensajes.

Requisitos previos

Antes de practicar el script que se muestra en este tutorial, asegúrese de completar las siguientes tareas.

  • Instale Django versión 3+ en Ubuntu 20+ (preferiblemente)
  • Crear un proyecto Django
  • Ejecute el servidor Django para verificar si el servidor funciona correctamente

Configurar una aplicación Django

Ejecute el siguiente comando para crear una aplicación Django con nombre enchufe:

$ python3 gestionar.py startapp socketapp

Ejecute el siguiente comando para instalar el canal:

$ canales de instalación de PIP

Agregue los canales y el nombre de la aplicación al Instalado_app parte de ajustes.py archivo:

Instalado_apps = [

'canales',
'SocketApp'
]

Definir el valor de ASGI_APplication en el ajustes.py archivo:

Asgi_application = 'canal_pro.asgi.solicitud'

Crea una carpeta llamada plantillas dentro de enchufe carpeta y establecer la ubicación de la aplicación de la plantilla en el PLANTILLAS parte de ajustes.py archivo:

Plantillas = [

… .
'Dirs': ['/home/fahmida/canal_pro/socketapp/plantlates']],
… .
,
]

La siguiente salida aparecerá en el terminal después de ejecutar el servidor Django. La salida muestra que la versión 3 de ASGI/Channels.0.3 se está ejecutando.

Crear un archivo de plantilla llamado índice.html En la ubicación de la plantilla definida para mostrar los datos enviados por WebSocket. El objeto Socket que se crea usando JavaScript leerá los datos utilizando el JSON.método parse (), luego pasar el valor al contenido del

etiqueta que contiene el valor de identificación 'msg.'

índice.html





Tutoriales del canal Django




texto




Modificar el puntos de vista.py archivo del enchufe con el siguiente contenido. El índice.html El archivo de plantilla se mostrará en el navegador con el texto variable cuando el índice() El método de este script se llama desde el URLS.py archivo. Si no se transmite ningún mensaje desde el socket, entonces el texto 'Linuxhint'se mostrará en el navegador.

puntos de vista.py

# Importar módulo de renderizado de Django
de Django.Rénero de importación de atajos
# Crear función de índice para mostrar el archivo HTML en el navegador
Índice de def (solicitud):
devolver render (solicitud ", índice.html ", context = 'text': 'linuxhint')

Modificar el URLS.py archivo del enchufe con el siguiente contenido. Se definen dos caminos en el script: el 'administración/'La ruta se usa para abrir el tablero de administración de Django y el' 'msg/'La ruta se usa para leer el mensaje de WebSocket.

URLS.py

de Django.administrador de importación de contribución
de Django.ruta de importación de URLS
Desde las vistas de importación de Socketapp
urlpatterns = [
ruta ('admin/', administrador.sitio.URLS),
ruta ('msg/', vistas.índice)
]

Cuando se ejecuta la siguiente URL sin definir el consumidor y los archivos de enrutamiento, el protocolo HTTP funcionará y aparecerá la siguiente salida.

http: // localhost: 8000/msg

Ahora, crea un consumidores.py archivo dentro del enchufe carpeta con el siguiente script. El conectar() método de ws_consumer se utilizará para aceptar la conexión Socket, leer el valor de tiempo actual cada segundo y enviar la hora actual en formato JSON a través de WebSocket cuando se llama a este método desde el archivo de enrutamiento.

consumidores.py

# Importar módulo JSON
importar json
# Importar WebSocketConsumer
de canales.genérico.WebSocket Import WebSocketConsumer
# Importar el módulo de fecha y hora
desde la importación de fecha y hora de fecha y hora
# Importar módulo de sueño
Desde el tiempo de sueño
# Definir la clase de consumo para enviar los datos a través de WebSocketConsumer
Clase WS_Consumer (WebSocketConsumer):
Def Connect (Self):
ser.aceptar()
mientras (verdadero):
Ahora = DateTime.ahora()
ser.Enviar (JSON.Dumps ('TimeValue': ahora.strftime ("%h:%m:%s")))
dormir (1)

Crear el enrutamiento.py dentro de enchufe carpeta con el siguiente script. El 'msg/'La ruta se define en el script para llamar al consumidor para enviar los datos al socket.

enrutamiento.py

de Django.ruta de importación de URLS
de .Los consumidores importan ws_consumer
# Establezca la ruta para llamar al consumidor
WS_URLPATRNS = [
ruta ('msg/', ws_consumer.as_asgi ())
]

Modificar el asgi.py Archivo con el siguiente script. Los módulos que se requieren para manejar HTTP y las solicitudes de WebSocket se importan en el script.

asgi.py

# Importar módulo OS
importar sistema operativo
# Import get_asgi_application para manejar el protocolo HTTP
de Django.centro.ASGI import get_asgi_application
# Importar Protocuctperouter y Urlrouter para establecer el enrutamiento de WebSocket
de canales.Enrutamiento de protoculos de importación, urlrouter
# Importar authmiddlewarestack para manejar WebSocket
de canales.Auth Import AuthmiddleWarestack
# Importar enrutamiento de WebSocket
de SocketApp.enrutamiento importar ws_urlpatterns
# Asignar valor para django_settings_module
sistema operativo.reinar.setDefault ('django_settings_module', 'Channel_pro.ajustes')
# Definir la variable de aplicación para manejar HTTP y WebSocket
aplicación = ProtocillyPerouter (
'http': get_asgi_application (),
'WebSocket': authmiddlewarestack (urlrouter (ws_urlpatterns)))
)

Ahora, ejecute la siguiente URL del navegador nuevamente para leer los datos del WebSocket.

http: // localhost: 8000/msg/

Si el consumidor y el enrutador funcionan correctamente, entonces se mostrará el siguiente reloj digital en el navegador. Aquí, el enrutador ha enviado la solicitud WebSocket utilizando el 'msg/'ruta al consumidor que ha aceptado la solicitud y envió los datos a la plantilla para mostrar el reloj digital en el navegador donde el segundo valor de la hora actual se actualiza cada segundo.

Conclusión

Este tutorial le mostró cómo implementar una aplicación en tiempo real utilizando el marco y los canales de Django creando un reloj digital simple. Otros tipos de aplicaciones en tiempo real también se pueden implementar utilizando django y canales, como sistemas de chat en línea. Los scripts utilizados en este tutorial trabajan para las versiones de Django 3+ y las versiones de canal 3+ solo. Entonces, si está utilizando una versión anterior de Django o canal, deberá actualizar la versión antes de probar el script proporcionado en este tutorial.