【Python/前端】Django创建ws/websocket接口 并供前端(vue)消费

一、后端

python、django(channels)

1.1、安装channels

pip install channels
pip install channels_redis

1.2、配置项目settings.py文件中的INSTALLED_APPS

新增channels项目主站名称

1.3、配置项目settings.py文件中新增ASGI_APPLICATION

1.4、在APP(子站)中新建routing.py文件

from django.conf.urls import url

from myChat.conView import ChatService

websocket_urlpatterns = [
    url(r"ws/", ChatService()),
]

 

1.5、在APP(子站)中新建conView.py文件

复制代码
import json
import time

from channels.generic.websocket import WebsocketConsumer


class ChatService(WebsocketConsumer):
    # 当Websocket创建连接时
    def connect(self):
        print("已连接")
        self.accept()
        # 每隔2秒给前端发送数据
        for i in range(10):
            time.sleep(2)
            self.send(text_data=json.dumps({
                'code': 200,
                'message': "djhafkja"
            }))

    # 当Websocket接收到消息时
    def receive(self, text_data=None, bytes_data=None):
        print("已收到消息")

    # 当Websocket发生断开连接时
    def disconnect(self, code):
        print("已断开")
复制代码

 

1.6、在项目(主站)中新建routing.py文件 

复制代码
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter

import myChat.routing

application = ProtocolTypeRouter({
    "websocket": AuthMiddlewareStack(
        URLRouter(
            myChat.routing.websocket_urlpatterns
        )
    ),
})
复制代码

 

 

1.7、启动

python .\manage.py runserver

 

 

 

 

 

 

 

二、前端

vue

复制代码
    initWebSocket() {
      this.websock = new WebSocket("ws://127.0.0.1:8000/ws/");
      this.websock.onmessage = this.WebSocketOnMessage;
      this.websock.onopen = this.WebSocketOnOpen;
      this.websock.onerror = this.WebSocketOnError;
      this.websock.onclose = this.WebSocketOnClose;
    },

    WebSocketOnMessage(e) {
      this.msg.push(JSON.parse(e.data).message);
      console.log("WebSocketOnMessage");
      console.log(e);
      console.log(JSON.parse(e.data).message);
    },

    WebSocketOnOpen(e) {
      console.log("WebSocketOnOpen");
      console.log(e);
    },

    WebSocketOnError(e) {
      console.log("WebSocketOnError");
      console.log(e);
    },

    WebSocketOnClose(e) {
      console.log("WebSocketOnClose");
      console.log(e);
      console.log(e.code);
    },
复制代码

 

 

 

三、效果

 

posted @   淡怀  阅读(771)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2020-01-07 【IDEA】+创建一个maven项目并发布部署
2020-01-07 【远程仓库】+maven仓库jar包管理/自制maven包上传至公共仓库
2020-01-07 【模板】+【测试工作文档模板】+3交付测试用例
2020-01-07 【模板】+【测试工作文档模板】+2测分
2020-01-07 【模板】+【测试工作文档模板】+1测试策略&测试计划
2020-01-07 【Java】+操作数据库
点击右上角即可分享
微信分享提示

目录导航