Pré-requisitos
Antes de praticar o script mostrado neste tutorial, certifique-se de concluir as seguintes tarefas.
- Instale o Django versão 3+ no Ubuntu 20+ (de preferência)
- Crie um projeto Django
- Execute o servidor Django para verificar se o servidor está funcionando corretamente
Configurar um aplicativo Django
Execute o seguinte comando para criar um aplicativo Django chamado socketapp:
$ python3 manage.py startapp socketappExecute o seguinte comando para instalar o canal:
Canais de instalação de $ pipAdicione os canais e o nome do aplicativo ao INSTALLED_APP parte de definições.py Arquivo:
INSTALLED_APPS = […
'canais',
'socketapp'
]
Defina o valor de ASGI_APPLICATION no definições.py Arquivo:
ASGI_APPLICATION = 'channel_pro.Asgi.aplicativo'Crie uma pasta chamada modelos dentro de socketapp pasta e definir a localização do modelo do aplicativo no MODELOS parte de definições.py Arquivo:
MODELOS = [… .
'DIRS': ['/ home / fahmida / channel_pro / socketapp / templates'],
… .
,
]
A seguinte saída aparecerá no terminal após a execução do servidor Django. A saída mostra que ASGI / Channels versão 3.0.3 está correndo.
Crie um arquivo de modelo chamado índice.html no local do modelo definido para exibir os dados enviados pelo WebSocket. O objeto de soquete que é criado usando JavaScript lerá os dados usando o JSON.método parse () e, em seguida, passe o valor para o conteúdo do
tag que contém o valor de ID, 'msg.'
índice.html
texto
Modifique o Visualizações.py arquivo do socketapp com o seguinte conteúdo. O índice.html arquivo de modelo será exibido no navegador com o texto variável quando o índice() método deste script é chamado a partir do urls.py Arquivo. Se nenhuma mensagem for transmitida do soquete, o texto 'LinuxHint'será exibido no navegador.
Visualizações.py
# Importar módulo de renderização do Djangode django.importação de atalhos renderização
# Criar função de índice para exibir o arquivo HTML no navegador
índice def (pedido):
retornar render (pedido, "índice.html ", context = 'text': 'LinuxHint')
Modifique o urls.py arquivo do socketapp com o seguinte conteúdo. Dois caminhos são definidos no script: o 'admin /'path é usado para abrir o Django Administration Dashboard, e o'msg /'caminho é usado para ler a mensagem WebSocket.
urls.py
de django.contrib import adminde django.caminho de importação de urls
de visualizações de importação de socketapp
urlpatterns = [
caminho ('admin /', admin.local.urls),
caminho ('msg /', visualizações.índice)
]
Quando o seguinte URL é executado sem definir o consumidor e os arquivos de roteamento, o protocolo HTTP funcionará e a seguinte saída aparecerá.
http: // localhost: 8000 / msg
Agora, crie um consumidores.py arquivo dentro do socketapp pasta com o seguinte script. O conectar() método de ws_consumer será usado para aceitar a conexão do soquete, ler o valor da hora atual a cada segundo e enviar a hora atual no formato JSON via WebSocket quando este método for chamado a partir do arquivo de roteamento.
consumidores.py
# Importar módulo JSONimport json
# Import WebsocketConsumer
de canais.genérico.websocket import WebsocketConsumer
# Importar módulo datetime
de datetime import datetime
# Importar módulo de suspensão
do tempo importar dormir
# Defina a classe de consumidor para enviar os dados por meio do WebsocketConsumer
classe ws_consumer (WebsocketConsumer):
def conectar (auto):
auto.aceitar()
enquanto (verdadeiro):
agora = datetime.agora()
auto.enviar (json.dumps ('timeValue': agora.strftime ("% H:% M:% S")))
dormir (1)
Crie o roteamento.py dentro de socketapp pasta com o seguinte script. O 'msg /'caminho é definido no script para chamar o consumidor para enviar os dados para o soquete.
roteamento.py
de django.caminho de importação de urlsa partir de .consumidores importam ws_consumer
# Defina o caminho para ligar para o consumidor
ws_urlpatterns = [
caminho ('msg /', ws_consumer.as_asgi ())
]
Modifique o Asgi.py arquivo com o seguinte script. Os módulos necessários para lidar com solicitações HTTP e WebSocket são importados no script.
Asgi.py
# Importar módulo de sistema operacionalimportar os
# Importe get_asgi_application para lidar com o protocolo http
de django.testemunho.asgi import get_asgi_application
# Import ProtocolTypeRouter e URLRouter para definir o roteamento do websocket
de canais.importação de roteamento ProtocolTypeRouter, URLRouter
# Import AuthMiddlewareStack para lidar com websocket
de canais.auth import AuthMiddlewareStack
# Importar roteamento de websocket
de socketapp.routing import ws_urlpatterns
# Atribuir valor para DJANGO_SETTINGS_MODULE
os.ambiente.setdefault ('DJANGO_SETTINGS_MODULE', 'channel_pro.definições')
# Defina a variável do aplicativo para lidar com http e websocket
application = ProtocolTypeRouter (
'http': get_asgi_application (),
'websocket': AuthMiddlewareStack (URLRouter (ws_urlpatterns))
)
Agora, execute o seguinte URL no navegador novamente para ler os dados do WebSocket.
http: // localhost: 8000 / msg /
Se o consumidor e o roteador estiverem funcionando corretamente, o seguinte relógio digital será exibido no navegador. Aqui, o roteador enviou a solicitação WebSocket usando o 'msg /'caminho para o consumidor que aceitou a solicitação e enviou os dados para o modelo para mostrar o relógio digital no navegador onde o segundo valor da hora atual é atualizado a cada segundo.
Conclusão
Este tutorial mostrou como implementar um aplicativo em tempo real usando a estrutura e canais Django criando um relógio digital simples. Outros tipos de aplicativos em tempo real também podem ser implementados usando Django e canais, como sistemas de bate-papo online. Os scripts usados neste tutorial funcionam para Django versões 3+ e Channel versões 3+ apenas. Portanto, se você estiver usando uma versão anterior do Django ou do Canal, será necessário atualizar a versão antes de testar o script fornecido neste tutorial.