首页 > 其他分享 >实训5_“长征•人员损失”模块实现【附完整代码】

实训5_“长征•人员损失”模块实现【附完整代码】

时间:2024-03-13 11:58:53浏览次数:29  
标签:loss list cz 实训 模块 import 长征

实训:“长征•人员损失”模块实现

在本实训中,我们继续修改首页的相关内容,添加一个呈现长征中各支红军队伍的人员损失统计信息的 “长征•人员损失” 模块,并利用echarts框架实现数据的图形化展示,具体步骤如下:

  1. 修改global_data.py (位于项目根目录下的models/子目录内),在文件中原来代码的基础上,声明一个变量cz_loss,并对其赋值(赋值后,cz_loss是一个包含四个元素的列表,每个元素为一个字典对象。关于列表和字典的相关知识将在下一个任务中学习),如图1所示:图1 修改后global_data.py文件的内容
    cz_loss = [
        {"id": "cz-doughnut1", "army": "红一方面军", "loss": 91.9, "color": "#fd5b4e",
         "description": "1934年10月,中央红军长征出发时,总兵力8.6万余人。1934年11月底至12月初,中央红军渡过湘江后,锐减至3万余人。"
                        "1935年10月,陕甘支队到达陕北吴起镇时,兵力总数约为7000余人."},
        {"id": "cz-doughnut2", "army": "红二方面军", "loss": 142.9, "color": "#25bce9",
         "description": "1934年8月,红6军团奉命西征时,全军团约9700余人。1934年10月,红2、6军团会师时,两军团合计约7700余人。"
                        "1936年10月22日,红一、二方面军会师时,尚有兵力1.1万余人。"},
        {"id": "cz-doughnut4", "army": "红四方面军", "loss": 88, "color": "#ffa63e",
         "description": "1934年5月初,红四方面军长征开始时,总计约10万人。1936年10月,红军三大主力会师时,"
                        "红四方面军5个军和直属队共计3.81万人。红四方面军西征后,最后到达陕西的人数约1.2万人左右。"},
        {"id": "cz-doughnut25", "army": "红二十五军", "loss": 114.1, "color": "#94eae3",
         "description": "1934年11月,红25军出发长征时,共2980人。1935年7月,红25军从陕西沣峪口地区出发继续长征时,全军4000余人。"
                        "1935年9月,红25军长征胜利到达延川永坪镇时,全军共有3400余人。"}
    ]

  2. 修改cz_main.py (位于项目根目录下), 首先在文件的第3行代码中,添加对cz_loss变量的引用,然后向context变量中添加一个键值对,如图2所示。图2 修改后cz_main.py文件的内容

    from flask import Flask, render_template
    
    from models.global_data import v_list,cz_infos,cz_loss
    
    from views.cz_profile import profile                # 导入cz_profile模块中的profile蓝图
    from views.cz_auth import auth                      # 导入cz_auth模块中的auths蓝图
    from views.cz_history import history                # 导入cz_history模块中的history蓝图
    from views.cz_hero import hero                      # 导入cz_hero模块中的hero蓝图
    from views.cz_video import video                    # 导入cz_video模块中的video蓝图
    from views.cz_battle import battle                  # 导入cz_battle模块中的battle蓝图
    from views.cz_literature import literature          # 导入cz_literature模块中的literature蓝图
    from views.cz_memorial import memorial              # 导入cz_memorial模块中的memorial蓝图
    
    app = Flask(__name__)
    
    # 将可能的蓝图路由封装到元组中,以便于下面通过for循环将多个蓝图注册到主应用上
    bps = (profile, auth, history, hero, video, battle, literature, memorial)
    for bp in bps:
        app.register_blueprint(bp)  # 将对应的路由实现蓝图注册到主app应用上
    
    context = {
        "v_list": v_list,                       # 用于向图片轮播模块提供数据
        "info_list": cz_infos.split("\n"),      # 用于向长征·苦难辉煌模块提供数据
        "cz_loss": cz_loss                      # 用于向长征·人员损失模块提供数据
    }
    
    
    @app.route("/")
    def main():
        return render_template("/index/cz_index.html", **context)
        # return render_template("/index/cz_index.html", v_list=v_list, info_list=cz_infos.split("\n"))  # \n:回车换行符
    
    
    if __name__ == "__main__":
        app.run(port=19901, host="127.0.0.1", debug=True)
    

  3. 修改cz_index.html(位于项目根目录下的templates/index/子目录内)文件,在“长征•苦难辉煌”模块后添加一个“长征•人员损失”模块及相关的JavaScript脚本的引用代码,如图3所示。图3 修改后cz_index.html文件的内容

    {% extends "/cz_base.html" %}
    
    {% block title %} 长征 {% endblock %}
    
    {% block main %}
    
    <!-- 长征•图片轮播 -->
    <section id="myCarousel" class="carousel slide" data-bs-ride="carousel">
        <ul class="carousel-indicators">
            {% for v in v_list %}
            {% if loop.first %}
            <li data-bs-target="#myCarousel" data-bs-slide-to="{{loop.index0}}"
                class="active" aria-current="true" aria-label="Slide{{loop.index}}"></li>
            {% else %}
            <li data-bs-target="#myCarousel" data-bs-slide-to="{{loop.index0}}"
                aria-label="Slide{{loop.index}}"></li>
            {% endif %}
            {% endfor %}
        </ul>
        <div class="carousel-inner">
            {% for v in v_list %}
            {% if loop.first %}
            <div class="carousel-item active">
                <img class="d-block w-100" src="{{ url_for('static', filename=v.img_src) }}">
            </div>
            {% else %}
            <div class="carousel-item">
                <img class="d-block w-100" src="{{ url_for('static', filename=v.img_src) }}">
            </div>
            {% endif %}
            {% endfor %}
        </div>
        <ul class="m-0">
            <li class="carousel-control-prev" data-bs-target="#myCarousel" data-bs-slide="prev">
                <span class="carousel-control-prev-icon" aria-hidden="true"></span>
            </li>
            <li class="carousel-control-next" data-bs-target="#myCarousel" data-bs-slide="next">
                <span class="carousel-control-next-icon" aria-hidden="true"></span>
            </li>
        </ul>
    </section>
    
    <!-- 长征•苦难辉煌 -->
    <section class="cz-profile mt-1 bg-cz">
        <div class="container  py-4">
            <div class="row">
                <div class="block-title-w">
                    <h2 class="block-title">长征 • 苦难辉煌</h2>
                    <span class="icon-title">
                    <span></span>
                    <img src="{{ url_for('static', filename='images/star.png') }}" width="30" height="30">
                    </span>
                    <a href="{{ url_for('profile.profile_page') }}">
                    <span class="sub-title mt-3">
                        {% for line in info_list %}
                            {{ line }}
                            {% if loop.index != 1 %}
                            <br>
                            {% endif %}
                        {% endfor %}
                    </span>
                    </a>
                </div>
            </div>
        </div>
    </section>
    
    <!-- 长征·人员损失 -->
    <section class="cz-loss mt-1 py-4">
        <div class="container">
            <div class="block-title-w">
                <h2 class="block-title">长征 ·人员损失</h2>
                <span class="icon-title">
                    <span></span>
                    <img src="{{ url_for('static', filename='images/star.png') }}" width="30" height="30">
                    </span>
                <span class="sub-title mt-3 text-primary">
                    长达两年的万里征途中,红军队伍付出了极大牺牲,人员由30余万锐减至3万余人。<br>
                    参考网址:https://wenku.baidu.com/view/a1ce44abb0717fd5360cdc3e.html?rec_flag=default
                </span>
            </div>
            <div class="row">
                {%for loss in cz_loss %}
                <div class="col-md-3 col-sm-6 col-xs-12 text-center">
                    <div class="cz-loss-doughnut" id="{{loss.id}}"></div>
                    <h2 class="cz-loss-title">{{loss.army}}</h2>
                    <div class="cz-loss-decs">
                        <p>{{loss.description}}</p>
                    </div>
                </div>
                {% endfor %}
            </div>
        </div>
    </section>
    
    {% endblock %}
    
    {% block jsinclude %}
    <script type="text/javascript">
        let cz_loss={{ cz_loss | tojson | safe }}
    </script>
    <script src="{{ url_for('static', filename='js/echarts.min.js') }}"></script>
    <script src="{{ url_for('static', filename='js/cz_loss_daughnut.js') }}"></script>
    {% endblock %}
    
    
    
    
    

    说明:本模块中要利用Echarts框架实现数据的图形化展示,因此要先导入Echarts的JavaScript库及自定义用于绘制甜甜圈图的JavaScript文件cz_loss_daughnut.js,如图3的第102-103行代码所示,引用的JavaScript文件位于项目根目录下static目录下的js子目录中,利用Flask提供的url_for()方法可以正确构造出对应资源的URL路径。另外,在绘制甜甜圈图需要用到从视图函数中传递给模板的cz_loss对象中的相关数据,因此,在图3第100行代码处,将cz_loss对象转换为JSON数据后,赋值给了同名的JavaScript变量。

  4. 修改cz_loss_daughnut.js文件(位于项目根目录下的static/js/子目录内),添加如图3所示的JavaScript代码:图3 修改后cz_loss_daughnut.js文件的内容
    if(cz_loss){
        cz_loss.forEach(function(item) {
            let doughnut = document.getElementById(item.id);
            let myChart = echarts.init(doughnut);
            let gaugeData = [{
                value: item.loss, detail: { valueAnimation: true, offsetCenter: ['0%', '0%']}
              }];
            let option = {
              series: [{
                  type: 'gauge', startAngle: 90, endAngle: -270, pointer: { show: false },
                  progress: { show: true, overlap: false, roundCap: false, clip: false, color: 'red'},
                  axisLine: { lineStyle: { width: 20,} },
                  splitLine: { show: false },
                  axisTick: { show: false },
                  axisLabel: { show: false },
                  data: gaugeData,
                  color: item.color,
                  detail: { fontSize: 22, color: 'red',
                            formatter: item.loss < 100 ? '{value}%' : (100 - item.loss).toFixed(1) +'%'
                          }
                }]
            };
            myChart.setOption(option);
        });
    }
    
    
    
    
    
    

  5. 修改完成后,重新刷新首页页面,应该能看到 “长征•人员损失”模块如图5所示。

标签:loss,list,cz,实训,模块,import,长征
From: https://blog.csdn.net/lingyaoJUN/article/details/136645621

相关文章

  • Nginx安装nginx-rtmp-module模块
    简介nginx中的模块虽然就是类似插件的概念,但是它无法像VsCode那样轻松的安装扩展。nginx要安装其它模块必须同时拿到nginx源代码和模块源代码,然后手动编译,将模块打到nginx中,最终生成一个名为nginx的可执行文件。流程查看当前nginx的版本(假设安装位置为:/usr/local/nginx)下......
  • 什么是PLC远程控制模块?
    随着工业自动化的不断发展,可编程逻辑控制器(PLC)已成为现代工业设备中不可或缺的核心组件。然而,传统的PLC管理方式往往受限于现场操作和维护,难以满足日益复杂的工业需求。在这一背景下,PLC远程控制模块应运而生,为工业设备的远程管理带来了革命性的变革。今天,我们就来深入探讨一......
  • 20个Python random模块的代码示例
    本文分享自华为云社区《Python随机数探秘:深入解析random模块的神奇之处》,作者:柠檬味拥抱。标准库random函数大全:探索Python中的随机数生成随机数在计算机科学和数据科学领域中扮演着重要角色,Python的标准库中提供了random模块,用于生成各种随机数。本篇博客将深入探讨random模块......
  • angualr - 模块与组件
    模块@NgModule的设计意图静态的元数据(declarations)运行时的元数据(providers)组合与分组(imports和exports)《angular从零到一》说的简单些:NgModule是一个装饰器函数,它接收一个用来描述模块属性的元数据对象。其中最重要的属性是:❑declarations:声明本模块中拥有......
  • ListModelSerializer模块 LL
    自定义反序列化字段#一些只参与反序列化的字段,但是不是与数据库关联的#在序列化类中规定,并在校验字段时从校验的参数字典中剔除classPublishModelSerializer(serializers.ModelSerializer):#自定义不入库的反序列化字段re_name=serializers.CharField(writ......
  • React — 请求模块(http)封装、API模块封装
    一、请求模块封装//axios封装//根域名配置//超时//请求拦截器/响应拦截器importaxiosfrom'axios'consthttp=axios.create({baseURL:"",timeout:5000})//在发送请求之前拦截插入自定义配置对于参数的处理http.interceptors.request.use(config......
  • 响应模块 LL
     1、作用根据用户请求URL或用户可接受的类型,筛选出合适的渲染组件。用户请求URL:http://127.0.0.1:8000/test/?format=jsonhttp://127.0.0.1:8000/test.json 2、内置渲染器显示json格式:JSONRenderer访问URL:http://127.0.0.1:8000/test/?format=jsonhttp://12......
  • 请求模块 LL
     1、CBV源码分析#视图层fromdjango.shortcutsimportrender,HttpResponsefromdjango.viewsimportViewclassCBVTest(View):#通过调度(dispatch)分发请求defdispatch(self,request,*args,**kwargs):passsuper().dispatch(request,......
  • Ansible 常用模块
    3.4)Ansible常用模块Ansible默认提供了很多模块来供我们使用。我们可以通过ansible-doc-l命令查看到当前ansible都支持哪些模块通过ansible-doc-s模块名可以查看该模块有哪些参数可以使用。目前2023为止:模块总量基本保存在3387个。虽然模块众多,但最常用的......
  • BOSHIDA DC电源模块与稳压技术的结合优势
    BOSHIDADC电源模块与稳压技术的结合优势结合DC电源模块和稳压技术有以下优势: 1.稳定性:DC电源模块可以将交流电转换为直流电,并通过稳压技术保持输出电压稳定。这可以确保电子设备在不同负载和环境条件下都能获得稳定的电源供应,避免因电压波动而引起的设备故障或性能下降。2......