Django数据驾驶舱

news2024/11/27 2:16:49

Django数据驾驶舱

      • 1.项目介绍
      • 2.项目结构
      • 3.库表结构
        • 3.1 appcsdn的models
        • 3.2 appssq的models
        • 3.3 appweather的models
        • 3.4 appweibo的models
      • 4.功能展示
      • 5.解决问题
        • 5.1 路由配置
        • 5.2 后端数据与前端echarts展示
        • 5.3 长图表丝滑滚动条
      • 6.遗留问题
      • 7.资源分享

1.项目介绍

这里介绍本人最近进行的数据展示项目,该项目由7个部分组成:CSDN统计、福彩信息、天气预报、股指信息、AI绘图、数据库监控。这些都是笔者感兴趣的数据,组建而成的模块。

项目的技术栈为:Django框架、jQuery前端、mysql数据库、python编码

github项目地址:见文末
在这里插入图片描述

2.项目结构

该项目,对于大屏中的板块,分别创建了4个应用:appcsdn、appssq、appweather、appweibo;

项目静态信息存放在static目录下;html网页资源存放在templates中;

controlCabin文件夹则包含:配置文件settings.py、路由文件urls.py等
在这里插入图片描述

3.库表结构

3.1 appcsdn的models

应用appcsdn中的models.py

from django.db import models
# cdsn类
class csdnInfo(models.Model):
    id = models.IntegerField(verbose_name='id主键', primary_key=True)
    csdn_reader = models.CharField(verbose_name='总访问量', max_length=32)
    csdn_arcticles = models.CharField(verbose_name='文章数', max_length=16)
    csdn_order = models.CharField(verbose_name='总排名', max_length=16)
    csdn_fans = models.CharField(verbose_name='粉丝数', max_length=16)
    csdn_tfans = models.CharField(verbose_name='铁粉数', max_length=16)
    csdn_good = models.CharField(verbose_name='获赞数', max_length=16)
    csdn_comment = models.CharField(verbose_name='评论数', max_length=16)
    csdn_collect = models.CharField(verbose_name='被收藏数', max_length=16)
    csdn_share = models.CharField(verbose_name='名片分享数', max_length=16)
    record_time = models.CharField(verbose_name='记录时间', max_length=32)

    class Meta:
        db_table = 'csdnInfo'  # 指明数据库表名

    verbose_name = 'csdn统计'  # 在admin站点中显示的名称
    verbose_name_plural = verbose_name  # 显示的复数名称
    get_latest_by = 'record_time'
    ordering = ['record_time']  # 按彩票期数降序排列,-表示降序
3.2 appssq的models

应用appssq中的models.py

from django.db import models
# ssq的类
class ssqInfo(models.Model):
    id = models.IntegerField(verbose_name='id主键', primary_key=True)
    ssq_code = models.CharField(verbose_name='彩票期数', max_length=16)
    ssq_date = models.CharField(verbose_name='出奖日期', max_length=32)
    ssq_red = models.CharField(verbose_name='红球号码', max_length=32)
    ssq_blue = models.CharField(verbose_name='蓝球号码', max_length=6)
    ssq_poolmoney = models.CharField(verbose_name='奖池金额', max_length=16)
    ssq_content = models.CharField(verbose_name='中奖分布信息', max_length=255)

    class Meta:
        db_table = 'ssqInfo'  # 指明数据库表名
        verbose_name = '福彩信息'  # 在admin站点中显示的名称
        verbose_name_plural = verbose_name  # 显示的复数名称
        ordering = ['-ssq_code']  # 按彩票期数降序排列,-表示降序
3.3 appweather的models

应用appweather中的models.py

from django.db import models
# weather类
class weatherInfo(models.Model):
    id = models.IntegerField(verbose_name='id主键', primary_key=True)
    nation = models.CharField(verbose_name='国家', max_length=32)
    province = models.CharField(verbose_name='省份', max_length=32)
    city_name = models.CharField(verbose_name='城市', max_length=32)
    city_id = models.CharField(verbose_name='城市id', max_length=32)
    today_dayText = models.CharField(verbose_name='天气状况', max_length=32)
    today_heat = models.CharField(verbose_name='温度', max_length=32)
    today_wind = models.CharField(verbose_name='风向风力', max_length=32)
    weather_info = models.CharField(verbose_name='7日天气', max_length=3000)
    record_date = models.CharField(verbose_name='记录日期', max_length=32)
    record_time = models.CharField(verbose_name='记录时间', max_length=32)

    class Meta:
        db_table = 'weatherInfo'  # 指明数据库表名

    verbose_name = '天气预报信息'  # 在admin站点中显示的名称
    verbose_name_plural = verbose_name  # 显示的复数名称
    ordering = ['province']  # 按彩票期数降序排列,-表示降序
3.4 appweibo的models

应用appweibo中的models.py

from django.db import models
# weibo类
class weiboInfo(models.Model):
    id = models.IntegerField(verbose_name='id主键', primary_key=True)
    weibo_record_time = models.CharField(verbose_name='记录时间', max_length=32)
    weibo_rank = models.CharField(verbose_name='热搜排名', max_length=32)
    weibo_label = models.CharField(verbose_name='标签', max_length=32)
    weibo_word = models.CharField(verbose_name='热搜词汇', max_length=255)
    weibo_num = models.CharField(verbose_name='热搜量', max_length=32)
    weibo_category = models.CharField(verbose_name='分类', max_length=32)


    class Meta:
        db_table = 'weiboInfo'  # 指明数据库表名

    verbose_name = '微博热搜统计'  # 在admin站点中显示的名称
    verbose_name_plural = verbose_name  # 显示的复数名称
    get_latest_by = 'record_time'
    ordering = ['weibo_rank']  # 按彩票期数降序排列,-表示降序

以上,应用中的models定义好后,可以在命令行运行下面的语句在如mysql等数据库中建表

首次创建Django内置表结构

python manage.py migrate 

让 Django知道我们自定义模型有一些变更,并根据我们自定义app的模型生成创建数据表的脚本

python manage.py makemigrations apphot

通过命令创建apphot模型对应的数据库表 ,命令最后是应用名称

python manage.py makemigrations appcsdn

4.功能展示

在这里插入图片描述

5.解决问题

5.1 路由配置

考虑到项目比较简单,没有配置二级路由,这里路由配置主要是数据接口的获取使用

from django.contrib import admin
from django.urls import path
from appssq.views import view_data_ssq,view_web_ssq,view_datacode_url,view_datacode,view_datacontent,view_datacontent_url,view_stock,view_stock_url
from appcsdn.views import view_csdn_url,view_csdn
from appweather.views import view_data_weather,view_weather
from appweibo.views import view_weibo_url,view_weibo

urlpatterns = [
    path('admin/', admin.site.urls),
    # ssq
    path('index.html',view_data_ssq),    # 福彩信息刷新测试1
    path('appssq/datacode_url',view_datacode_url),    # 福彩信息刷新测试2
    path('appssq/datacode',view_datacode),    # 福彩信息刷新测试2
    path('appssq/datacontent_url', view_datacontent_url),  # 福彩信息刷新测试3
    path('appssq/datacontent', view_datacontent),  # 福彩信息刷新测试3
    path('appssq/web_ssq',view_web_ssq),    # 福彩重定向
    # 股票指数
    path('appssq/stock', view_stock),  # 股票刷新测试1
    path('appssq/stock_url', view_stock_url),  # 股票刷新测试1
    # csdn
    path('appcsdn/csdn_url',view_csdn_url),    # csdn统计刷新测试1
    path('appcsdn/csdn',view_csdn),    # csdn统计刷新测试1
    # weather
    path('appweather/date_weather', view_data_weather),  # weather天气信息1
    path('appweather/weather',view_weather),  # weather天气信息
    # weibo
    path('appweibo/weibo_url', view_weibo_url),  # weibor天气信息1
    path('appweibo/weibo', view_weibo),  # weibo天气信息
]

在这里插入图片描述

5.2 后端数据与前端echarts展示

在静态资源的map.js中,使用了ajax进行后端数据调用,在调整参数async:false后,前端数据显示正常。

//需要执行的内容:获取ssq_code
var ssq_code = ''; // 全局变量
get_ssq_code = function () {
$.ajax({
    type: "get",
    url: "http://127.0.0.1:8000/appssq/datacode_url",
    async:false,  //值为true表示异步,只为false表示同步
    success: function (real_code) {
    ssq_code = '->'+real_code+'期<-'; //将局部变量赋值给全局变量
    }
  })
}
get_ssq_code();

在这里插入图片描述

5.3 长图表丝滑滚动条

在天气预报模块,应用到了滚动条

<div class="boxnav" style="height: 200px; overflow: auto; padding: 0 10px;">
    <table class="table1" width="100%" border="0" cellspacing="0" cellpadding="0" >
        <thead style="background: #034481;position: relative;z-index: 2;">
            <tr>
                <th>城市名称</th>
                <th>天气状况</th>
                <th>温度</th>
                <th>风力</th>
            </tr>
        </thead>
        <tbody style="position: relative;">
            <tr> 
                <td>城市名称</td>
                <td><span class='text-w'>天气状况</span></td> 
                <td><span class='text-b'>温度</span></td> 
                <td><div class='text-d'>风力</div></td></tr>
        </tbody>
    </table>
</div>

效果:上下无缝滚动、滚动条隐藏、鼠标进入停止离开恢复

var divTop = 0;
// 天气预报 tr内容表格填充
get_weather = function(){
    $.ajax({
        type: "get",
        url: "http://127.0.0.1:8000/appweather/date_weather",
        async:false,  //值为true表示异步,只为false表示同步
        success: function (weather_list) {
            var td_str = ''
            for (var one in weather_list){
                var province =  weather_list[one]['province'];
                var city_name = weather_list[one]['city_name'];
                var today_dayText = weather_list[one]['today_dayText'];
                var today_heat = weather_list[one]['today_heat'];
                var today_wind = weather_list[one]['today_wind'];
                td_str += "<tr> <td>"+province+" "+city_name+"</td> <td><span class='text-w'>"+today_dayText+"</span></td> <td><span class='text-b'>"+today_heat+"</span></td> <td><div class='text-d'>"+today_wind+"</div></td></tr>";
            }
            // 完全拼接后,再添加标签内
            $("tbody").append(td_str);
            initScroll(weather_list)
        }
    })
}
get_weather();

// 天气预报tbale1-无缝丝滑滚动

function initScroll(list) {
    let tbody = $('.table1 tbody')
    let len = list.length
    tbody.css('top', '0')
    let speed = 50
    let trH = tbody.find('tr').outerHeight()
    let marquee = function () {
        if (divTop <= -trH * len) {
            divTop = 0
        } else {
            divTop -= 1
        }
        tbody.css('top', divTop + 'px')
    }
    if (window.deptCatalogTopTimer) {
        clearInterval(window.deptCatalogTopTimer)
    }
    window.deptCatalogTopTimer = setInterval(marquee, speed)
    $(".table1").hover(function(){
        if (window.deptCatalogTopTimer) {
            clearInterval(window.deptCatalogTopTimer)
        }
    }, function(){
        window.deptCatalogTopTimer = setInterval(marquee, speed)
    })
}

6.遗留问题

由于时间仓促,有些模块的细节没有配置接口,写了固定数据,比如csdn板块的折线图、福彩板块的折线图、词云图、AI图片、数据库监控,不过不影响使用。

7.资源分享

github项目地址:https://github.com/phillip927/controlCabin

下载项目资源后,可以对照着我的这篇文章,进行运行配置:

Django项目开发操作实例_django项目开发实战-CSDN博客

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

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

相关文章

STM32读写备份寄存器和实时时钟

文章目录 1. 硬件电路 2. RTC操作注意事项 操作步骤 3. 代码实现 3.1 读写备份寄存器 3.1.1 main.c 3.2 实时时钟 3.2.1 MyRTC.c 3.2.2 MyRTC.h 3.2.3 main.c 1. 硬件电路 对于BKP备份寄存器和RTC实时时钟的详细解析可以看下面这篇文章&#xff1a; STM32单片机BKP备…

水果销售系统

摘 要 随着电子商务的快速发展&#xff0c;传统的实体销售模式面临着越来越多的挑战。在这个数字化的时代&#xff0c;消费者的购物习惯发生了翻天覆地的变化&#xff0c;消费者更倾向于在家中通过网络平台浏览并购买商品&#xff0c;这无疑给传统水果销售带来了极大的挑战。为…

【动态规划】1130. 叶值的最小代价生成树

1130. 叶值的最小代价生成树 难度&#xff1a;中等 力扣地址&#xff1a;https://leetcode.cn/problems/minimum-cost-tree-from-leaf-values/description/ 题目内容 给你一个正整数数组 arr&#xff0c;考虑所有满足以下条件的二叉树&#xff1a; 每个节点都有 0 个或是 2 个…

算法04 模拟算法之一维数组相关内容详解【C++实现】

大家好&#xff0c;我是bigbigli&#xff0c;模拟算法我们将分为几个章节来讲&#xff0c;今天我们只看一维数组相关的题目 目录 模拟的概念 训练&#xff1a;开关灯 解析 参考代码 训练&#xff1a;数组变化 解析 参考代码 训练&#xff1a;折叠游戏 解析 参考代码 …

韩顺平0基础学java——第29天

p592-599 线程 用户线程和守护线程 1.用户线程:也叫工作线程&#xff0c;当线程的任务执行完或通知方式结束 2守护线程:一般是为工作线程服务的&#xff0c;当所有的用户线选束&#xff0c;守护线程自动结束 3.常见的守护线程:垃圾回收机制 当我们希望当main线程结束后&…

C# Onnx Yolov5 水果识别,人员识别,物品识别 人工智能

目录 先上效果 来电废话&#xff0c;但实用 网络成功案例实践易失败的原因 万物检测涉及技术 下载合集 关键代码 全部代码 实操vs2022安装关键 YOLO V5核心库编译 编写自己识别软件 更新相关依赖 标注字库文件 测试效果 名词解释YOLO 名词解释ONNX 源码 直播教…

利用第三方服务对目标进行被动信息收集防止被发现(web安全白帽子)

利用第三方服务对目标进行被动信息收集防止被发现&#xff08;web安全白帽子&#xff09; 1 被动信息收集1.1 信息收集内容1.2 信息用途 2 信息收集-DNS2.1 DNS信息收集NSLOOKUP2.1.1 ping2.1.2 nslookup 2.2 DNS信息收集-DIG&#xff08;此命令查到的结果更复杂些&#xff0c;…

Apache IoTDB vs InfluxDB 开源版,架构性能全面对比!

分布式、端边云同步、读写查询性能&#xff0c;Apache IoTDB 与 InfluxDB 开源版的详尽对照&#xff01; 在物联网&#xff08;IoT&#xff09;领域&#xff0c;数据的采集、存储和分析是确保系统高效运行和决策准确的重要环节。随着物联网设备数量的增加和数据量的爆炸式增长&…

Golang | Leetcode Golang题解之第174题地下城游戏

题目&#xff1a; 题解&#xff1a; func calculateMinimumHP(dungeon [][]int) int {n, m : len(dungeon), len(dungeon[0])dp : make([][]int, n 1)for i : 0; i < len(dp); i {dp[i] make([]int, m 1)for j : 0; j < len(dp[i]); j {dp[i][j] math.MaxInt32}}dp[…

爬虫笔记11——网页爬取数据写入csv

数据持久化存储进文件&#xff0c;前面的文章已经讲解如何存储入Excel表格了&#xff0c;有兴趣可以看一下&#xff0c;现在来记录一下如何存储进csv文件。 csv存储 csv简述 csv就是一个普通文件&#xff0c;里面的内容是每一行中的数据用逗号分隔&#xff0c;然后文件后缀为…

Golang | Leetcode Golang题解之第179题最大数

题目&#xff1a; 题解&#xff1a; func largestNumber(nums []int) string {sort.Slice(nums, func(i, j int) bool {x, y : nums[i], nums[j]sx, sy : 10, 10for sx < x {sx * 10}for sy < y {sy * 10}return sy*xy > sx*yx})if nums[0] 0 {return "0"…

教师信息管理系统

摘要 随着互联网技术与信息时代的高速发展和应用&#xff0c;教育行业也逐渐意识到互联网技术与信息化管理的融合。在传统的教师信息管理中&#xff0c;往往需要大量的纸质档案和手工处理&#xff0c;不仅效率低下&#xff0c;而且容易出现信息丢失和错误。因此为了提高教师信…

解决vs2022无法安装扩展程序包

在工具—>NuGet包管理器—>程序包管理设置&#xff0c;把程序包源设置为https://www.nuget.org/api/v2/&#xff0c;如下图 然后就可以在管理解决方案包界面搜索下载自己需要的扩展包

安全之战,巅峰对决 | 第八届XCTF国际网络攻防联赛总决赛首日赛况公布!

XCTF联赛由清华大学蓝莲花(Blue-Lotus)战队发起&#xff0c;国家创新与发展战略研究会主办&#xff0c;赛宁网安总体承办&#xff0c;旨在探索网络安全创新能力与发展潜力。第八届XCTF国际网络攻防联赛总决赛在四川省经济和信息化厅、四川省教育厅、四川省公安厅的指导下&#…

kafka(二)安装部署(2)windows

一、前提 安装Kafka之前&#xff0c;需要安装JDK、Zookeeper、Scala, 本次安装版本选择&#xff1a; JDK&#xff1a;1.8 Zookeeper&#xff1a;3.6.4 Scala&#xff1a;2.12 Kafka&#xff1a;3.5.2 1、jdk Java Downloads | Oracle 见jdk下载安装。 2、Zookeeper 下载…

Android进程间通信 Messenger详解

//这里服务端Service是运行在单独的进程中的 android:process“:other” class MessengerService : Service() { private lateinit var mMessenger: Messenger override fun onBind(intent: Intent): IBinder { log(TAG, “onBind~”) //传入Handler实例化Messenger mMes…

Android测量

最大模式&#xff08;MeasureSpec.AT_MOST&#xff09; 这个也就是父组件&#xff0c;能够给出的最大的空间&#xff0c;当前组件的长或宽最大只能为这么大&#xff0c;当然也可以比这个小。 最高两位是11的时候表示”最大模式”。即MeasureSpec.AT_MOST未指定模式&#xff08;…

Java | Leetcode Java题解之第179题最大数

题目&#xff1a; 题解&#xff1a; class Solution {public String largestNumber(int[] nums) {int n nums.length;// 转换成包装类型&#xff0c;以便传入 Comparator 对象&#xff08;此处为 lambda 表达式&#xff09;Integer[] numsArr new Integer[n];for (int i 0;…

windows git配置多个账号

window下git多账号配置_百度搜索 (baidu.com) 最重要的是这里生成新的id_rsa文件的时候&#xff0c;bash窗口是在 .ssh路径下 其实就是这个窗口在什么路径下执行的就是生成在什么路径 下面窗口路径不对&#xff0c;不是Desktop&#xff0c;应该是.ssh 如果是Desktop或者任何一…

如何解决跨区域文件传输存在的安全管控问题?

⼤型企业和集团为扩⼤市场份额、优化资源配置&#xff0c;会在不同地区设⽴多级下属分⽀机构、研发中心、实验室等&#xff0c;存在研发数据横向或纵向流转的需求&#xff0c;研发数据进行跨区域文件传输的场景。跨区域可能是网络区域&#xff0c;也可能是地理区域&#xff0c;…