django 实现前端 进度条

django 实现前端 进度条

后端

安装模块

channels==2.1.5
channels-redis==2.3.1

anyjson==0.3.3
asgi-redis==1.4.3
asgiref==2.3.0
asn1crypto==0.24.0
async-timeout==2.0.1

Twisted==18.9.0

启动一个redis

新建django程序 quan

目录结构
quan
        quan
                asgi.py
                consumers.py
                routing.py
                settings.py
settings.py

INSTALLED_APPS = [
    ‘channels‘,
]

# django-channels配置
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [("127.0.0.1", 6379)],
        },
    },
}

# 配置ASGI
ASGI_APPLICATION = "quan.routing.application"
asgi.py

import os
import django
from channels.routing import get_default_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "quan.settings")
django.setup()
application = get_default_application()
consumers.py

from asgiref.sync import async_to_sync
from channels.generic.websocket import WebsocketConsumer
from channels.layers import get_channel_layer

channel_layer = get_channel_layer()
import json
import time

class ExecConsumer(WebsocketConsumer):
    def connect(self):
        print(‘ws连接‘)
        # 创建channels group, 命名为:用户名,并使用channel_layer写入到redis
        async_to_sync(self.channel_layer.group_add)(self.scope[‘user‘].username, self.channel_name)

        # 返回给receive方法处理
        self.accept()

    def receive(self, text_data):
        id_list = eval(text_data)
        data = {‘1‘:99}

        async_to_sync(self.channel_layer.group_send)(
            self.scope[‘user‘].username,
            {
                "type": "user.message",
                "text": json.dumps(data),
            },
        )

    def user_message(self, event):
        # 消费
        self.send(text_data=event["text"])

    def disconnect(self, close_code):
        print("关闭ws")
        async_to_sync(self.channel_layer.group_discard)(self.scope[‘user‘].username, self.channel_name)
routing.py

from channels.auth import AuthMiddlewareStack
from channels.routing import URLRouter, ProtocolTypeRouter
from django.urls import path

from .consumers import ExecConsumer

application = ProtocolTypeRouter({
    "websocket": AuthMiddlewareStack(
        URLRouter([
            path(r"progress/", ExecConsumer),
        ])
    )
})

前端

<script>
            var socket = new WebSocket(‘ws://‘ + window.location.host + ‘/progress/‘);
            var id_list = [];

            $(".dataTables").find("tr").each(function () {
                var tdArr = $(this).children();
                var id = tdArr.eq(0).text();
                id_list.push(id)
            });
            id_list.splice(0, 1);
            var to = function () {
                socket.send(id_list);
            };
            socket.onopen = function () {

                setInterval(to, 1000);

            };
            //获得消息事件
            socket.onmessage = function (msg) {
                console.log(msg.data);
                var data = msg.data;
                var obj = JSON.parse(data);

                $.each(obj, function (key, val) {
                    $(‘#‘ + key).children(‘td‘).eq(7).html(val + ‘%‘)
                });

            };

            //关闭事件
            socket.onclose = function () {
                {#alert("Socket已关闭");#}
            };
            //发生了错误事件
            socket.onerror = function () {
                {#alert("发生了错误");#}
            }

        </script>

原文地址:http://blog.51cto.com/hequan/2322751

时间: 2024-10-02 00:21:13

django 实现前端 进度条的相关文章

几个Web前端经典使用的炫丽进度条(上)

1.  jQuery带圆形进度条倒计时 源码下载  /  在线演示 2. jQuery网站页面加载进度条 源码下载 /  在线演示 3.13款页面加载样式特效 源码下载/   在线演示 几个Web前端经典使用的炫丽进度条(上)

前端资源预加载并展示进度条

我们经常会看到,一些站点在首次进入的时候会先显示一个进度条,等资源加载完毕后再呈现页面,大概像这样: 然后整个页面的操作就会非常流畅,因为之后没必要再等待加载资源了.尤其是在移动端,或者是页游中,这样做能避免页面出现白屏(等待加载图片),很大程度提升用户体验.那这种技术是如何实现的呢?其实非常简单,本文就来从基础细节探究一番. 为什么需要资源预加载 大多时候,我们的页面并不是一次渲染完毕的,而是随着用户的操作,不断修改DOM节点,如果你动态插入了一个图片节点,那么浏览器要马上发一个http请求,

struts2实现文件上传进度条(前端JS+Java)(自我整理)

需要做一个文件上传进度的效果,结合网上资料和自己的实践后,这里做一个整理 步骤如下: 1.重写.自定义JakartaMultiPartRequest类 <span style="font-size:12px;">package com.hikvision.fileUploadProcess.interceptor; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import

AJAX大文件切割上传以及带进度条。

分块传输的原理就是利用HTML5新增的文件slice截取函数. 代码如下: html: <input id="f" type="file" name="part" onchange="writeFile()"> JS: 核心部分已经加粗显示了,其他部分不用看,因为实现的方式有很多种,不一定要按照我的方式去写,但是核心是不会变的. var writeFile = function(){ var temp = null

利用css3动画和border来实现圆形进度条

最近在学习前端的一些知识,发现border的功能十分强大啊! 首先来看看demo 就是这么一个圆形的进度条,在文本框中输入0-100的数值下面的进度条相应的转到多少 这个主要是利用border,旋转和css动画来实现的,主要思想是利用两个div来互相遮挡border形成的一个只有半圈有颜色的圆形,再利用旋转div的角度来调整显示 上代码: html+css+js(这里引入了jquery) <!DOCTYPE html> <html lang="en"> <

h5实现手机端等级进度条

h5实现等级进度条 需求如下: 实现一个动画进度条,页面一打开实现一个进度条动画,因为App这个页面会经常改,所以没有使用原审Android或者IOS来实现,希望通过H5来做: 服务器端返回如下数据: var Config = { // 等级大图片url地址 courierRankBigUrl: 'images/grade2-icon.png', // 配送员等级名称 courierRankName: '3级鲜锋官', // 同时可接单数 courierCanPackgeCountDoing:

Jquery网页加载进度条(随笔,当然要随便写,当日记动态心情写咯)

首先先是吐槽时间... 告诉大家一个好消息,就是有个妹子非常仰慕我的前端技术说要包养我 然后有好多羡慕嫉妒恨的童鞋一定要说,少年你太天真了,那一定是HR 然后我表示她不是HR,本宅的春天貌似要到来了...T_T,25年的单身生涯.终于走到了尽头......然后妹子也是前端...为了保证光辉形象.我必要努力提升技术 然后么今天闲的蛋疼,再看看一帮大牛们的装逼网站,然后无意间看到这一段,只想说大牛们的世界真会玩.... 利用图片上data,还有load 最后在用document.readyState

应用Response.Write实现带有进度条的多文件上传

前几天,写过一篇随笔“使用RESPONSE.WRITE实现在页面的生命周期中前后台的交互”.说是交互,实际上也主要是在ASP.NET的页面周期中 从后台利用RESPONSE.WRITE向前台即时的推送内容. 该篇随笔算是对上一篇文章的实际应用,利用RESPONSE.WRITE的这个特性实现上传文件时实时进度的显示.如对 RESPONSE.WRITE/RESPONSE.FLUSH不甚了解,请先移步这里. 先附上示例代码MultiUploadProgressClassic. 提前声明一点,HTML发

进度条-线性渐变

/* 进度条 */div.progress { width: 600px; margin: 10px auto; height: 20px; line-height: 20px; font-size: 14px; background: #F7F7F7; border-radius: 4px; box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);}div.progress div.bar { float: left; width: 60%; backgr