python Django Vue3 使用websockert 实现Echarts实时更新

前端vue

<template>
    <div>
        
        

        
       
        <div id="main">

        </div>


        
        
    </div>
</template>

<script>
import axios from 'axios'
import * as echarts from 'echarts';
import {reactive} from 'vue'
    export default {
        setup() {
            let data1 = reactive({'data':[]})
            let data2 = reactive({'data':[]})

            let initEarcharts=()=>{
                var chartDom = document.getElementById('main');
                var myChart = echarts.init(chartDom);
                var option;

                option = {
                xAxis: {
                    type: 'category',
                    data: data1.data
                },
                yAxis: {
                    type: 'value'
                },
                series: [
                    {
                    data: data2.data,
                    type: 'line'
                    }
                ]
                };

                option && myChart.setOption(option);
                
            }



            

            //初始化websocket
            const initWebsocket=()=>{
                let socket = new WebSocket('ws://127.0.0.1:8000/web_conn/')
                //建立
                socket.onopen=function(){
                    console.log('建立连接')
                }
                //接收消息
                socket.onmessage=function(msg){
                    let data = JSON.parse(msg.data)
                    console.log(msg.data)
                    data1.data = data[0]
                    data2.data = data[1]
                    // 调用echarts
                    initEarcharts()
                    
                    
                }
                //关闭
                socket.close=function(e){
                    console.log(e)
                    console.log('close')
                }
            }


            return{
                data1,
                data2,
                initEarcharts,
                initWebsocket,
            }
    },


        data() {
            return {
                
            }
        },
        methods: {
        

            // 调用定时任务
            times(){
                axios.get("http://localhost:8000/times1/?id="+localStorage.getItem('userid'))
            },



       
        },
        mounted() {
            
            this.times()
            this.initWebsocket()
            
            
            
        },
    }
</script>

<style scoped>
#main{
    width: 1000px;
    height: 400px;
}
</style>

后端django

from dwebsocket.decorators import accept_websocket
websocketlist=[]
# 和前端进行连接
@accept_websocket
def web_conn(request):
    if request.is_websocket:
        websocketlist.append(request.websocket)

    for message in request.websocket:
        break

import datetime


def send1(id):
    # 逻辑代码
    etime = datetime.datetime.strftime(datetime.datetime.now(),'Y-%m-%d')
    stime = datetime.datetime.strftime((datetime.datetime.now() - datetime.timedelta(days=7)), '%Y-%m-%d')
    sql = "select from_unixtime(ctime,'%%Y-%%m-%%d') as addtime,sum(integral) as integral from user_integral where userid=%d and type=1 and from_unixtime(ctime,'%%Y-%%m-%%d') between '%s' and '%s' group by from_unixtime(ctime,'%%Y-%%m-%%d') " % (
    int(id), stime, etime)
    res = db2.find_all(sql)

    stimelist = []
    for i in range(7, 0, -1):
        stimelist.append(datetime.datetime.strftime((datetime.datetime.now() - datetime.timedelta(days=i)), '%Y-%m-%d'))
    list = []
    print(stimelist)
    list1 = []
    list2 = []
    for i in stimelist:
        flag = False
        list2.append(str(i))
        for j in res:
            if i == j['addtime']:
                flag = True
                list1.append(int(j['integral']))
                continue
        if flag == False:
            list2.append(i)
            list1.append(0)
    list.append(stimelist)
    list.append(list1)

    # print(list)

    if websocketlist:
        for i in websocketlist:
            b1 = json.dumps(list, ensure_ascii=False).encode('utf-8')
            i.send(b1)

    return HttpResponse('ok')


from apscheduler.schedulers.background import BackgroundScheduler


def times1(request):
    id = request.GET.get('id')
    scheduler = BackgroundScheduler()
    # 添加调度任务
    # 调度方法为 timedTask,触发器选择 interval(间隔性),间隔时长为 2 秒
    scheduler.add_job(send1, 'interval', seconds=2,args=[id])
    # 启动调度任务
    scheduler.start()
    return HttpResponse('ok')

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值