Prerrequisitos
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)
- Crea un proyecto de Django
- Ejecute el servidor Django para comprobar si el servidor funciona correctamente
Configurar una aplicación Django
Ejecute el siguiente comando para crear una aplicación Django llamada calcetín:
$ python3 administrar.py startapp socketappEjecute el siguiente comando para instalar el canal:
$ pip instalar canalesAgregue los canales y el nombre de la aplicación al INSTALLED_APP parte de ajustes.py expediente:
INSTALLED_APPS = [..
'canales',
'socketapp'
]
Defina el valor de ASGI_APPLICATION en el ajustes.py expediente:
ASGI_APPLICATION = 'channel_pro.asgi.solicitud'Crea una carpeta llamada plantillas dentro de calcetín carpeta y establezca la ubicación de la plantilla de la aplicación en el PLANTILLAS parte de ajustes.py expediente:
PLANTILLAS = [.. .
'DIRS': ['/ home / fahmida / channel_pro / socketapp / templates'],
.. .
,
]
La siguiente salida aparecerá en la terminal después de ejecutar el servidor Django. La salida muestra que ASGI / Channels versión 3.0.3 está corriendo.
Crea un archivo de plantilla llamado índice.html en la ubicación de la plantilla definida para mostrar los datos enviados por WebSocket. El objeto de socket que se crea usando JavaScript leerá los datos usando JSON.método parse (), luego pase el valor al contenido del
etiqueta que contiene el valor de ID, 'msg.'
índice.html
texto
Modificar el puntos de vista.py archivo de la calcetín con el siguiente contenido. La í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 expediente. Si no se transmite ningún mensaje desde el conector, entonces el texto 'LinuxHint'se mostrará en el navegador.
puntos de vista.py
# Importar módulo de renderizado desde Djangode django.importación de atajos render
# Crear función de índice para mostrar el archivo HTML en el navegador
def index (solicitud):
return render (solicitud, "índice.html ", context = 'texto': 'LinuxHint')
Modificar el urls.py archivo de la calcetín con el siguiente contenido. Se definen dos rutas en el script: el 'administración/'se usa para abrir el panel de administración de Django, y la ruta'msg /'ruta se usa para leer el mensaje de WebSocket.
urls.py
de django.administrador de importación de contribucionesde django.ruta de importación de URL
desde vistas de importación de socketapp
urlpatterns = [
ruta ('admin /', admin.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á el siguiente resultado.
http: // localhost: 8000 / msg
Ahora, crea un consumidores.py archivo dentro del calcetín carpeta con el siguiente script. La conectar() método de ws_consumer se utilizará para aceptar la conexión de socket, leer el valor de la hora actual cada segundo y enviar la hora actual en formato JSON a través de WebSocket cuando se llame a este método desde el archivo de enrutamiento.
consumidores.py
# Importar módulo JSONimportar json
# Importar WebsocketConsumer
de los canales.genérico.importación de websocket WebsocketConsumer
# Importar módulo de fecha y hora
desde fecha y hora importar fecha y hora
# Importar módulo de sueño
desde el momento de importar el sueño
# Defina la clase de consumidor para enviar los datos a través de WebsocketConsumer
clase ws_consumer (WebsocketConsumer):
def connect (auto):
uno mismo.aceptar()
while (Verdadero):
ahora = fecha y hora.ahora()
uno mismo.enviar (json.dumps ('timeValue': ahora.strftime ("% H:% M:% S")))
dormir (1)
Crea el enrutamiento.py dentro de calcetín carpeta con el siguiente script. La 'msg /'La ruta está definida en el script para llamar al consumidor para enviar los datos al socket.
enrutamiento.py
de django.ruta de importación de URLde .los consumidores importan ws_consumer
# Establecer la ruta para llamar al consumidor
ws_urlpatterns = [
ruta ('msg /', ws_consumer.as_asgi ())
]
Modificar el asgi.py archivo con el siguiente script. Los módulos necesarios para manejar las solicitudes HTTP y WebSocket se importan en el script.
asgi.py
# Importar módulo de sistema operativoimportar sistema operativo
# Importar get_asgi_application para manejar el protocolo http
de django.centro.asgi import get_asgi_application
# Import ProtocolTypeRouter y URLRouter para configurar el enrutamiento websocket
de los canales.enrutamiento de importación ProtocolTypeRouter, URLRouter
# Importar AuthMiddlewareStack para manejar websocket
de los canales.auth import AuthMiddlewareStack
# Importar enrutamiento de websocket
de socketapp.importación de enrutamiento ws_urlpatterns
# Asignar valor para DJANGO_SETTINGS_MODULE
os.reinar.setdefault ('DJANGO_SETTINGS_MODULE', 'channel_pro.ajustes')
# Definir variable de aplicación para manejar http y websocket
application = ProtocolTypeRouter (
'http': get_asgi_application (),
'websocket': AuthMiddlewareStack (URLRouter (ws_urlpatterns))
)
Ahora, ejecute la siguiente URL desde el navegador nuevamente para leer los datos de WebSocket.
http: // localhost: 8000 / msg /
Si el consumidor y el enrutador funcionan correctamente, se mostrará el siguiente reloj digital en el navegador. Aquí, el enrutador ha enviado la solicitud de WebSocket usando el 'msg /'ruta al consumidor que aceptó 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 mediante la creación de un reloj digital simple. También se pueden implementar otros tipos de aplicaciones en tiempo real utilizando Django y canales, como los sistemas de chat en línea. Los scripts utilizados en este tutorial funcionan solo para las versiones 3+ de Django y las versiones 3+ de Channel. Por lo tanto, si está utilizando una versión anterior de Django o Channel, deberá actualizar la versión antes de probar el script proporcionado en este tutorial.