zoukankan      html  css  js  c++  java
  • 【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);
        },

    三、效果

    如果忍耐算是坚强 我选择抵抗 如果妥协算是努力 我选择争取
  • 相关阅读:
    U盘启动盘的制作与U盘重装系统
    如何使用鲁大师进行驱动备份
    电子科大POJ "3*3矩阵的乘法"
    数字图像处理之sobel边缘检测
    (续)一个demo弄清楚位图在内存中的存储结构
    VC++6.0出现no compile tool is associated with the extension.解决方法
    显卡参数简单介绍
    数字图像处理之位图在计算机中的存储结构
    图像处理之边缘检测概述
    linux下mysql数据库的操作
  • 原文地址:https://www.cnblogs.com/danhuai/p/15774318.html
Copyright © 2011-2022 走看看