Django + Bootstrap - 【echart】 统计图表进阶使用-统计用户日活日增、月活月增等数据(二)

news2024/11/25 10:50:13

一. 前言

Bootstrap是一个流行的前端框架,而ECharts是一个流行的可视化库。
Bootstrap可以用来设计网站和应用程序的用户界面,而ECharts可以用来创建交互式和可视化的图表。
chart.js中文文档:http://www.bootcss.com/p/chart.js/docs/
二. 进阶使用
基本使用已经在前文有过相关介绍,链接:https://blog.csdn.net/qq_43030934/article/details/131540606

本文是基于Django+bootstrap+echart插件的一个进阶使用,基本的用法就不做过多介绍了

二. 效果图

1.日活日增统计

在这里插入图片描述

2. 年月数据统计

在这里插入图片描述

三. 示例代码

废话不多说了,直接上代码,

1. 前端

代码是根据相关项目编写的,大家可根据自己的项目进行参考使用

{% extends "base.html" %} {% load static %}

{% block main %}
    {#    <script src="../../../../static/js/echarts-v5.1.2.min.js"></script>#}

    {% if 'is_superuser' in permissions.keys %}
        <!-- daily active users statistics start -->
        <section class="section" style="padding: 100px 0 30px 0">
            <div class="container">
                <div class="row justify-content-center">
                    <div class="col-12 text-center">
                        <div class="section-title mb-2">
                            <h4 class="title mb-4">用户数据统计</h4>
                        </div>
                    </div><!--end col-->
                </div><!--end row-->
                <div class="row mt-4 pt-2 position-relative" id="userDailyData" style="z-index: 1;">
                    <div class="col-lg-7 col-6 mt-4 pt-2">
                        <div class="counter-box text-center">
                            <div id="userDailyIncrease" style="width:auto;height:400px;"></div>
                        </div><!--end counter box-->
                    </div>

                    <div class="col-lg-5 col-6 mt-4 pt-2">
                        <div class="counter-box text-center">
                            <div id="userBaseData" style="width:auto;height:400px;"></div>
                        </div><!--end counter box-->
                    </div>
                </div><!--end row-->
                <div class="feature-posts-placeholder"></div>
            </div><!--end container-->
        </section><!--end section-->
        <!-- daily active users statistics End -->

        <!-- monthly/year increase users statistics start -->
        <section class="section" style="padding: 30px 0 100px 0">
            <div class="container">
                <div class="row mt-4 pt-2 position-relative" style="z-index: 1;">
                    <div class="col-lg-6 col-6 mt-4 pt-2">
                        <div class="counter-box text-center">
                            <div id="userMonthlyIncrease" style="width:auto;height:400px;"></div>
                        </div><!--end counter box-->
                    </div>

                    <div class="col-lg-6 col-6 mt-4 pt-2">
                        <div class="counter-box text-center">
                            <div id="userYearIncrease" style="width:auto;height:400px;"></div>
                        </div><!--end counter box-->
                    </div>
                </div><!--end row-->
                <div class="feature-posts-placeholder"></div>
            </div><!--end container-->
        </section><!--end section-->
        <!-- monthly/year increase users statistics  End -->
    {% endif %}

    <!-- Document change achievement Start -->
    <section class="section  bg-light">
        <div class="container">
            <div class="row mt-4 pt-2 position-relative" id="counter" style="z-index: 1;">
                <div class="col-md col-6 mt-4 pt-2">
                    <div class="counter-box text-center">
                        <img src="{% static 'images/homepage/Asset260.svg' %}" class="avatar avatar-small" alt="">
                        <h2 class="mb-0 mt-4"><span class="counter-value"
                                                    data-count="97">{{ quarterData.requestTotal }}</span></h2>
                        <h6 class="counter-head text-muted">{{ quarterData.currentQuarter }} Change requests</h6>
                    </div><!--end counter box-->
                </div>

                <div class="col-md col-6 mt-4 pt-2">
                    <div class="counter-box text-center">
                        <img src="{% static 'images/homepage/Asset189.svg' %}" class="avatar avatar-small" alt="">
                        <h2 class="mb-0 mt-4"><span class="counter-value"
                                                    data-count="15">{{ quarterData.completed }}</span></h2>
                        <h6 class="counter-head text-muted">Completed</h6>
                    </div><!--end counter box-->
                </div>

                <div class="col-md col-6 mt-4 pt-2">
                    <div class="counter-box text-center">
                        <img src="{% static 'images/homepage/Asset192.svg' %}" class="avatar avatar-small" alt="">
                        <h2 class="mb-0 mt-4"><span class="counter-value"
                                                    data-count="98">{{ quarterData.percentageComplete }}</span>%</h2>
                        <h6 class="counter-head text-muted">Request Complete</h6>
                    </div><!--end counter box-->
                </div>
            </div><!--end row-->
            <div class="feature-posts-placeholder"></div>
        </div><!--end container-->
    </section><!--end section-->
    <!-- Document change achievement End -->
{% endblock %}

{% block script %}
    <script>
        var MyViewVar = {
            userCurActiveData: {{ userCurActiveData|safe }},
            usersDataByDaily: {{ usersDataByDaily|safe }},
            usersDataByMonthly: {{ usersDataByMonthly|safe }},
            usersDataByYears: {{ usersDataByYears|safe }},
        }
        console.log(MyViewVar)
        var userDailyIncreaseChart = echarts.init(document.getElementById('userDailyIncrease'));
        userDailyIncreaseChart.setOption({
            title: {
                text: '日增日活',
                x: 'center'
            },
            // 图表图例
            legend: {
                orient: 'vertical',
                data: ['日活用户', '日增用户',],
                left: 'right',
            },
            xAxis: {
                name: '日',
                type: 'category',
                data: MyViewVar.usersDataByDaily.date_list,
                boundaryGap: false,
                axisLabel: {
                    inside: false, //刻度标签是否朝内,false朝外
                    interval: 1, // 设置标签全部显示
                    rotate: 30, // 设置标签旋转角度
                    maxInterval: 1000, // 设置刻度间隔
                },
                axisLine: {
                    lineStyle: {
                        color: '#333',
                        type: 'solid',
                    },
                }
            },
            yAxis: {
                name: '数量',
                type: 'value',
                axisLine: {
                    show: true,    // 是否显示坐标轴轴线
                    lineStyle: {
                        color: '#333',    // 坐标轴线线的颜色
                        type: 'solid',    // 坐标轴线线的类型(solid实线类型;dashed虚线类型;dotted点状类型)
                    },
                },
            },
            tooltip: {
                trigger: 'axis',
                axisPointer: {
                    type: 'cross'
                }
            },
            series: [
                {
                    name: '日增用户',
                    data: MyViewVar.usersDataByDaily.user_increase_count_list,
                    type: 'line',
                    itemStyle: {
                        color: '#91CC75',
                    },
                    markPoint: {
                        data: [
                            {type: 'max', name: '最大值'},
                            {type: 'min', name: '最小值'}
                        ]
                    },
                    lineStyle: {
                        color: '#91CC75', //线颜色
                        type: 'solid', //线的类型
                        opacity: 0.8, //线透明度
                        shadowBlur: 5, //阴影模糊度
                        shadowColor: '#999', //阴影颜色
                        shadowOffsetX: 2, //阴影X轴偏移量
                        shadowOffsetY: 2, //阴影Y轴偏移量
                        radius: 100 //曲线圆角半径
                    },
                },
                {
                    name: '日活用户',
                    type: 'line',
                    data: MyViewVar.usersDataByDaily.user_active_count_list,
                    itemStyle: {
                        color: '#FFC858',
                    },
                    markPoint: {
                        data: [
                            {type: 'max', name: '最大值'},
                            {type: 'min', name: '最小值'}
                        ]
                    },
                    lineStyle: {
                        color: '#FFC858', //线颜色
                    },
                },
            ]
        });

        var userBaseDataChart = echarts.init(document.getElementById('userBaseData'));
        //定义饼图数据
        var data = [
            {value: MyViewVar.userCurActiveData.dailyActiveCount, name: '日活用户'},
            {value: MyViewVar.userCurActiveData.monthlyActiveCount, name: '月活用户'},
        ];
        //定义饼图配置项
        var option = {
            title: {
                text: '用户当日及当月活跃人数\n' + '用户总人数:' + MyViewVar.userCurActiveData.totalCount,
                x: 'center'
            },
            tooltip: {
                trigger: 'item',
                formatter: "{a} <br/>{b} : {c}<br/>" + "用户总人数:" + MyViewVar.userCurActiveData.totalCount
            },
            legend: {
                orient: 'vertical',
                left: 'right',
                data: ['日活用户', '月活用户']
            },
            series: [
                {
                    name: '用户基础数据统计',
                    type: 'pie',
                    radius: ['40%', '60%'],
                    center: ['50%', '60%'],
                    data: data,
                    label: {
                        show: true,
                        formatter: function (params) {
                            // 计算总数
                            var total = MyViewVar.userCurActiveData.totalCount;
                            // 显示数据项名称和百分比
                            return params.name + '\n' + params.value + '人' + '\n' + (params.value / total * 100).toFixed(2) + '%';
                        }
                    },
                    itemStyle: {
                        emphasis: {
                            shadowBlur: 10,
                            shadowOffsetX: 0,
                            shadowColor: 'rgba(0, 0, 0, 0.5)'
                        }
                    },
                    color: ['#FF8D5D', '#FFC858']
                }
            ]
        };
        //渲染饼图
        userBaseDataChart.setOption(option);

        var userMonthlyIncreaseChart = echarts.init(document.getElementById('userMonthlyIncrease'));
        userMonthlyIncreaseChart.setOption({
            title: {
                text: '月增月活',
                x: 'center'
            },
            // 图表图例
            legend: {
                data: ['月活用户', '月增用户'],
                left: 'right',
            },
            xAxis: {
                name: '月',
                type: 'category',
                data: MyViewVar.usersDataByMonthly.month_list,
                boundaryGap: false,
                axisLabel: {
                    inside: false, //刻度标签是否朝内,false朝外
                    interval: 0, // 设置标签全部显示
                    rotate: 30, // 设置标签旋转角度
                    maxInterval: 1000, // 设置刻度间隔
                },
                axisLine: {
                    lineStyle: {
                        color: '#333',
                        type: 'solid',
                    },
                },
            },
            yAxis: {
                name: '数量',
                type: 'value',
                axisLine: {
                    show: true,    // 是否显示坐标轴轴线
                    lineStyle: {
                        color: '#333',    // 坐标轴线线的颜色
                        type: 'solid',    // 坐标轴线线的类型(solid实线类型;dashed虚线类型;dotted点状类型)
                    },
                },
            },
            tooltip: {
                trigger: 'axis',
            },
            series: [
                {
                    name: '月活用户',
                    type: 'line',
                    data: MyViewVar.usersDataByMonthly.user_active_count_list,
                    itemStyle: {
                        color: '#FFC858',
                    },
                    markPoint: {
                        data: [
                            {type: 'max', name: '最大值'},
                            {type: 'min', name: '最小值'}
                        ]
                    },
                    lineStyle: {
                        color: '#FFC858', //线颜色
                    },
                },
                {
                    name: '月增用户',
                    data: MyViewVar.usersDataByMonthly.user_increase_count_list,
                    type: 'line',
                    itemStyle: {
                        color: '#91CC75',
                    },
                    label: {
                        show: true,
                        formatter: function (params) {
                            return params.value;
                        }
                    },
                    markPoint: {
                        data: [
                            {type: 'max', name: '最大值'},
                            {type: 'min', name: '最小值'}
                        ]
                    },
                    lineStyle: {
                        color: '#91CC75', //线颜色
                    },
                },
            ]
        });

        var userYearIncreaseChart = echarts.init(document.getElementById('userYearIncrease'));
        userYearIncreaseChart.setOption({
            title: {
                text: '用户年增长及跃人数\n' + '用户总人数:' + MyViewVar.userCurActiveData.totalCount,
                x: 'center'
            },
            tooltip: {},
            legend: {
                orient: 'vertical',
                data: ['年活跃用户', '年增长用户'],
                left: 'right',
            },
            xAxis: {
                axisLine: {
                    show: true,    // 是否显示坐标轴轴线
                    lineStyle: {
                        color: '#333',    // 坐标轴线线的颜色
                        type: 'solid',    // 坐标轴线线的类型(solid实线类型;dashed虚线类型;dotted点状类型)
                    },
                },
                data: MyViewVar.usersDataByYears.year_list,
            },
            yAxis: {
                name: '数量',
                type: 'value',
                axisLine: {
                    show: true,    // 是否显示坐标轴轴线
                    lineStyle: {
                        color: '#333',    // 坐标轴线线的颜色
                        type: 'solid',    // 坐标轴线线的类型(solid实线类型;dashed虚线类型;dotted点状类型)
                    },
                },
            },
            series: [
                {
                    name: '年活跃用户',
                    type: 'bar',
                    data: MyViewVar.usersDataByYears.user_active_count_list,
                    itemStyle: {
                        color: '#FFC858',
                    },
                },
                {
                    name: '年增长用户',
                    type: 'bar',
                    data: MyViewVar.usersDataByYears.user_increase_count_list,
                },

            ],
            label: {
                show: true,
                position: 'top',  // 在柱形顶部显示标签
                formatter: '{c}',  // 数值显示格式
                color: '#000',  // 标签颜色
                fontSize: 14,  // 标签字体大小
            },
        })
    </script>
{% endblock %}

2. 后端代码

后端代码接口使用的技术栈是Django+ORM
代码仅供参考,大家可自行根据自己项目的业务进行参考使用

class DataStatisticsView(LoginRequiredJSONMixin, APIView):

    def get(self, request):
        permissions = get_user_permissions(request.user.id)

        quarterData = get_quarter_data_statistics(CP_Register)

        # 获取当前日期
        now_date = datetime.date.today()
        userCurActiveData = self.get_cur_user_active_data(now_date)
        usersDataByDaily = self.get_increase_and_active_users_by_daily(now_date)
        usersDataByMonthly = self.get_increase_and_active_users_by_monthly(now_date)
        usersDataByYears = self.get_increase_and_active_users_by_years(now_date)

        context = {
            'permissions': permissions,
            'quarterData': quarterData,
            'userCurActiveData': userCurActiveData,
            'usersDataByDaily': usersDataByDaily,
            'usersDataByMonthly': usersDataByMonthly,
            'usersDataByYears': usersDataByYears,
        }
        return render(request, 'teams/my_dashboard/statistics/data_statistics.html', context)

    def get_increase_and_active_users_by_years(self, now_date):
        """数据库中按年增长及年活跃人数"""
        # 按年增长统计用户
        users_per_year = User.objects.annotate(year=ExtractYear('date_joined')).values('year').annotate(
            total=Count('id'))
        user_increase_count_list = []
        year_list = []
        for user in users_per_year:
            user_increase_count_list.append(user['total'])
            year_list.append(user['year'])

        # 按年统计活跃人数
        users_per_year = User.objects.annotate(year=ExtractYear('last_login')).values('year').annotate(
            total=Count('id'))
        user_active_count_list = []
        for user in users_per_year:
            user_active_count_list.append(int(user['total']) * ActiveCoefficient.year_active)

        usersDataByYears = {
            'user_increase_count_list': user_increase_count_list,
            'user_active_count_list': user_active_count_list,
            'year_list': year_list,
        }

        return usersDataByYears

    def get_increase_and_active_users_by_monthly(self, now_date):
        """
        近一年用户月增及月活跃数据
        sqlite按当月统计一年用户的数量sql:SELECT DATE('now', 'start of month') AS end_date,
                                    DATE('now', '-12 months', 'start of month') AS start_date;
                                    SELECT strftime('%Y-%m', date_joined) AS month,
                                           COUNT(id) AS count
                                    FROM auth_user
                                    WHERE date_joined >= DATE('now', '-12 months', 'start of month')
                                    GROUP BY month
                                    ORDER BY month;
        """
        user_increase_count_list = []
        user_active_count_list = []
        month_list = []

        # FIXME--bug:某月用户数量为0时无数据
        """
        end_date = now_date.replace(day=30)
        start_date = (end_date - datetime.timedelta(days=365)).replace(day=1)

        {'user_count_list': [33, 37, 30, 35, 25, 22, 11, 35, 4, 6, 1, 7], 
         'month_list': ['22-07', '22-08', '22-09', '22-10', '22-11', '22-12', '23-01', '23-02', '23-03', '23-04', '23-05', '23-07']
         }
        users_last_year = User.objects.filter(date_joined__range=(start_date, end_date)).annotate(
            month=TruncMonth('date_joined')).values('month').annotate(count=Count('id'))
        for user in users_last_year:
            user_count_list.append(user['count'])
            month_list.append(user['month'].strftime('%y-%m'))
        """

        # 计算往前12个月的日期时间,计算月增月活数据
        for i in range(12):
            # 当月起始时间和月末时间
            month_first_day = (now_date - datetime.timedelta(days=365 * i / 12)).replace(day=1)
            month_last_day = (month_first_day + datetime.timedelta(days=32)).replace(day=1) - datetime.timedelta(days=1)
            month_increase_count = User.objects.filter(date_joined__range=(month_first_day, month_last_day)).count()
            month_list.append(month_first_day.strftime('%y-%m'))
            user_increase_count_list.append(month_increase_count)
            moth_active_count = int(User.objects.filter(
                last_login__range=(month_first_day, month_last_day)).count() * ActiveCoefficient.monthly_active)
            user_active_count_list.append(moth_active_count)

        usersDataByMonthly = {
            'user_increase_count_list': user_increase_count_list[::-1],
            'user_active_count_list': user_active_count_list[::-1],
            'month_list': month_list[::-1],
        }

        return usersDataByMonthly

    def get_increase_and_active_users_by_daily(self, now_date):
        """近一月用户日增日活数据"""
        # 获取一个月前日期
        start_date = now_date - datetime.timedelta(days=30)
        date_list = []
        user_increase_count_list = []
        user_active_count_list = []
        for i in range(1, 31):
            # 循环遍历获取当天日期
            cur_date = start_date + datetime.timedelta(days=i)
            next_date = start_date + datetime.timedelta(days=i + 1)
            day_increase_count = User.objects.filter(last_login__range=(cur_date, next_date)).count()
            date_list.append(cur_date.strftime('%y-%m-%d'))
            user_increase_count_list.append(day_increase_count)
            day_active_count = int(
                User.objects.filter(last_login__range=(cur_date, next_date)).count() * ActiveCoefficient.daily_active)
            user_active_count_list.append(day_active_count)

        dailyIncreaseUsers = {
            'date_list': date_list,
            'user_increase_count_list': user_increase_count_list,
            'user_active_count_list': user_active_count_list,
        }

        return dailyIncreaseUsers

    def get_cur_user_active_data(self, now_date):
        """当日及当月活跃数据"""
        # 日活用户
        dailyActiveCount = User.objects.filter(last_login__gte=now_date).count()
        # 月活用户
        first_day_of_month = datetime.date(now_date.year, now_date.month, 1)
        last_day_of_month = datetime.date(now_date.year, now_date.month + 1, 1) - datetime.timedelta(days=1)
        monthlyActiveCount = User.objects.filter(last_login__range=(first_day_of_month, last_day_of_month)).count()
        # 用户总数
        totalCount = User.objects.all().count()

        userCurActiveData = {
            'dailyActiveCount': int(dailyActiveCount * ActiveCoefficient.daily_active),
            'monthlyActiveCount': int(monthlyActiveCount * ActiveCoefficient.monthly_active),
            'totalCount': totalCount,
            'date': now_date.strftime('%Y-%m-%d'),
        }
        return userCurActiveData

utils.py

class ActiveCoefficient:
    daily_active = 1.5
    monthly_active = 1.5
    year_active = 3

def get_user_permissions(user_id):
    from registration.models import UserProfile

    u_pro = UserProfile.objects.filter(user_id=user_id).first()
    permissions = OrderedDict()
    if u_pro.is_superuser:
        permissions['is_superuser'] = '超级管理员'
    if u_pro.is_team_leader:
        permissions['is_team_leader'] = '团队负责人'
    if u_pro.is_ele_feature_extension_admin:
        permissions['ele_feature_extension_admin'] = '普通管理员'
    if u_pro.is_es_feature_extension_admin:
        permissions['es_feature_extension_admin'] = '普通管理员'

    if u_pro.role:
        permissions = get_role_permission(u_pro.role.id, permissions)
    return permissions

def get_quarter_data_statistics(obj):
    """季度发布数据统计"""

    today = datetime.date.today()
    current_quarter = (today.month - 1) // 3 + 1
    # 当前年份季度
    current_year_quarter = str(today.year) + 'Q{}'.format(str(current_quarter))
    total = obj.objects.filter(schedule__startswith=current_year_quarter).count()
    completed_cnt = obj.objects.filter(schedule__startswith=current_year_quarter).filter(
        Q(decision__in=['', 'Released']) | Q(decision__isnull=True)).count()
    try:
        percentageComplete = int(completed_cnt / total * 100)
    except Exception as e:
        percentageComplete = 0
        logger.info('homePage error :{}'.format(e))
    QuarterData = {
        'requestTotal': total,
        'percentageComplete': percentageComplete,
        'completed': completed_cnt,
        'currentQuarter': 'Q{}'.format(current_quarter),
    }
    return QuarterData

以上就是Django + Bootstrap - 【echart】 统计图表进阶使用-统计用户日活日增、月活月增等数据的基本使用,希望对你有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/765931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手把手教你搭建SpringCloud项目(六)Eureka实现服务发现

一、服务发现简介 各个微服务在启动时&#xff0c;将自己的网络地址等信息注册到服务发现组件上(eureka,zookeeper,Consul),服务发现组件会存储这些信息。服务消费者会从服务发现组件查询服务提供者的网络地址&#xff0c;然后根据该地址调用服务提供者的接口。各个微服务与服务…

centos升级龙蜥

centos升级龙蜥 龙蜥简介龙蜥官方社区centos升级龙蜥首先确认自己的centos版本下载迁移镜像源安装epel源迁移工具安装i686包查看执行迁移脚本结果查看重启机器查看系统信息 龙蜥简介 2021年10月19日的大会上&#xff0c;阿里云发布全新操作系统“龙蜥”并宣布开源。龙蜥操作系…

SAP与顺丰快递接口签名验证加密ABAP程序例子(MD5加密、转换为Base64字符串) <转载>

原文链接&#xff1a;http://www.baidusap.com/abap/7408 1, 顺丰平台数字签名简介 SAP系统和顺丰快递平台中的API接口对接时&#xff0c;需要将传输的JSON字符串进行数字签名加密。数字签名具体使用的是MD5方式&#xff0c;格式如下&#xff1a;msgData&#xff08;业务报文&a…

DOM编程

DOM编程 DOM树&#xff1a; 获取DOM对象的方式&#xff1a; 通过id直接获取 id禁止使用&#xff0c;因为项目都是css、html、js分离的 2、通过API&#xff0c;doucument.getElementById 3、通过class&#xff0c;doucument.getElementsByClassName 4、通过标签名称&#xff0…

【框架篇】Bean作用域和生命周期

Bean作用域和生命周期 一&#xff0c;Bean作用域 Bean作用域指的是在Spring框架中&#xff0c;定义了Bean实例的创建和销毁方式&#xff0c;以及可以访问该实例的范围&#xff0c;并决定了每次通过容器获取Bean时返回的是同一个实例还是不同的实例。 1.1&#xff0c;Bean作用…

mysql 2 -- 数据库基本操作、数据表的操作、mysql查询操作

一、数据库基本操作 1、数据库的登录及退出 连接数据库&#xff1a; mysql -u用户名 -h主机地址(省略代表本机) -p 密码&#xff08;格式为123...&#xff09;;注&#xff1a; 刚下载安装的时候需要通过管理员进入 退出数据库,以下三种方式都可以&#xff1a; exit quit …

Spring:表达式语言

Spring EL 概述使用概述 Spring 表达式(Spring EL) 是一种功能强大的表达式语言,以 #{ 表达式 } 作为定界符,用于在运行时对对象进行访问和操作。通过使用 Spring 表达式达到简化开发、减少逻辑或配置的编写的目的。 使用 Spring EL 主要可以引用 bean ,调用其属性和方…

苹果手机备忘录如何导入新手机?手机备忘录怎么转移?

一般来说&#xff0c;大多数手机用户更换手机的频率是3—5年&#xff0c;在一部手机使用了几年之后&#xff0c;就会出现内存不足、系统卡顿、电池续航时间较短等问题&#xff0c;这时候就需要更换新的手机了。有不少苹果手机用户在更换新手机的时候&#xff0c;都很发愁一个问…

Hugging News #0717: 开源大模型榜单更新、音频 Transformers 课程完成发布!

每一周&#xff0c;我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新&#xff0c;包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等&#xff0c;我们将其称之为「Hugging News」。本期 Hugging News 有哪些有趣的消息&#xff0…

TypeScript 学习笔记(六):索引签名类型、映射类型

一、索引签名类型 1. 索引类型查询操作符 keyof keyof可以用于获取某种类型的所有键&#xff0c;其返回类型是联合类型。 interface Info {name: string;age: number; } let infoProp: keyof Info; infoProp "name"; infoProp "age"; infoProp "…

知识普及:Boc-Hynic,133081-25-1,6-叔丁氧羰肼基-3-吡啶甲酸,

&#xff08;文章资料汇总来源于&#xff1a;陕西新研博美生物科技有限公司小编MISSwu&#xff09;​ Boc-Hynic&#xff0c;6-[2-(tert-Butoxycarbonyl)hydrazinyl]nicotinic acid&#xff0c;6-[2-(叔丁氧羰基)肼基]烟酸&#xff0c;6-叔丁氧羰肼基-3-吡啶甲酸 ------------…

追梦之旅【数据结构篇】——C语言手撕八大经典排序

追梦之旅【数据结构篇】——C语言手撕八大经典排序&#x1f60e; 前言&#x1f64c;排序的认识排序的稳定性&#xff1a;排序的时间复杂度和空间复杂度以及如何选择适合的排序&#xff1a; 优化版选择排序冒泡排序普通版冒泡排序升级版冒泡排序 直接插入排序希尔排序堆排序快速…

ChatGPT变现五个思路

一、前言 ChatGPT是一款AI聊天机器人&#xff0c;发布于2022年11月。凭借着在广泛的知识领域为消费者问题做出清晰、详尽解答的出色能力&#xff0c;其一经推出就引发全球轰动&#xff0c;自然也得到零售行业的高度关注。例如&#xff0c;消费者只要询问ChatGPT如何布置一个梦…

将Spring Boot项目打包部署到阿里云linux服务器

首先 你要保证自己的服务器上有java环境 如果没有可以参考我的文章 linux服务器中安装java JDK1.8版本 然后 我们打开我们的Spring Boot项目 双击 package 生命周期进行打包 打包完成之后 我们找到 target 下面会有一个jar包 然后 我们右键它 如下图操作 系统就会帮你打开它所…

javascript 导出表格的excel

一个php网站的表格,需要增加导出excel的功能, 因对web开发不甚了解,开始想着用php导出, 搜索一番发现比较复杂,而且我的表格里已经有数据了, 如果导出又要去库中获取一次,不是负担加倍, 可否把现有表格数据,直接导出来? 答案是肯定的,用js在前端导出 开源js组件…

三个属性让你学会书写横向滑动窗口!内附代码和详解!

先说结论&#xff1a; 父组件添加&#xff1a; display: flex; overflow-x: auto; 子组件添加&#xff1a; flex-shrink: 0; 下面进行详细讲述。 在书写滑动页面之前&#xff0c;最好了解一下flex布局的基本原理和常用属性&#xff0c;以下链接介绍较详细&#xff0c;图文并…

ROS1 ROS2学习

ROS1 ROS2学习 安装 ROSROS1ROS2 命令行界面ROS2 功能包相关指令ROS 命令行工具ROS1 CLI工具ROS2 CLI工具 ROS 通信核心概念节点 - Node节点相关的CLI 话题 - Topic编写发布者程序流程&#xff1a;编写订阅者程序流程&#xff1a;话题相关的CLI 服务 - Service编写客户端程序流…

CVE-2013-4547

CVE-2013-4547 一、环境搭建二、漏洞原理三、漏洞复现 一、环境搭建 如下介绍kali搭建的教程 cd ~/vulhub/nginx/CVE-2013-4547 // 进入指定环境 docker-compose build // 进行环境编译 docker-compose up -d // 启动环境docker-compose ps使用这条命令查看当前正在运…

v-for复习

 在真实开发中&#xff0c;我们往往会从服务器拿到一组数据&#xff0c;并且需要对其进行渲染。  这个时候我们可以使用 v-for 来完成&#xff1b;  v-for 类似于 JavaScript 的 for 循环&#xff0c;可以用于遍历一组数据&#xff1b; 1.v-for 基本使用  v-for 的基本…

水雨情自动监测系统-水雨情监测设备

近年来&#xff0c;暴雨及极端天气越来越频发&#xff0c;造成了洪涝与积水灾害给各地排水相关部门带来了巨大的压力&#xff0c;也给公众的生命财产损失带来了巨大的风险。为降低洪涝造成的损失&#xff0c;我们不仅要加强排水基础建设&#xff0c;还要提升实时监测手段&#…