12.1 基于Django的服务器信息查看应用(系统信息、用户信息)
文章目录
- 新建Django项目
- 创建子应用并设置本地化
- 创建数据库表
- 创建超级用户
- git管理项目(requirements.txt、README.md、.ignore)
- 主机信息监控应用的框架搭建
- 具体功能实现
- 系统信息展示
- 前端界面设计
- 视图函数设计
- 用户信息展示
- 视图函数设计
- 自定义过滤器的实现
- 前端界面设计
目标:使用 Python Django框架和psutil开发一个中文版 Linux 服务器信息查看应用,可查看的信息包括系统、CPU、内存、硬盘、进程、网络、登录用户等,同时可查看并导出部分数据的图表。
psutil模块参考文章:参考文章:https://www.cnblogs.com/saneri/p/7528283.html
新建Django项目
使用虚拟的解释器环境
下图中,应该将 Inherit global site-packages 勾选上

创建子应用并设置本地化




创建数据库表
Django项目自带后台管理
虽然新建的Django项目还没有加入新数据,但是Django项目自带的用户名之类的数据信息都需要存储到数据库中。
首先生成数据库迁移脚本
然后将迁移脚本写入数据库

创建超级用户

在Terminal运行项目:python manage.py runserver
浏览器访问

至此,项目最基本的搭建完成。
git管理项目(requirements.txt、README.md、.ignore)
右击项目名,新建.ignore文件


提示warning信息:
warning: in the working copy of ‘.idea/inspectionProfiles/profiles_settings.xml’, LF will be replaced by CRLF the next time Git touches it
根据文章:https://www.cnblogs.com/poppyCHN/p/16865100.html和https://www.cnblogs.com/outs/p/6909567.html。
做出以下修改:

将代码添加到本地仓库完成。
然后使用:
pip freeze # 列出当前环境已经安装的第三方模块
pip freeze > requirements.txt # 输出重定向到requirements.txt 文件
右击新建File,新建README.md文件。
主机信息监控应用的框架搭建
| 路由 | 视图函数 | 前端模板 |
|---|---|---|
| / | views.index | index.html |
| /user/ | views.user | user.html |
| /cpu/ | views.cpu | cpu.html |
| /memory/ | views.memory | memory.html |
| /disk/ | views.disk | disk.html |
| /network/ | views.network | network.html |
| /process/ | views.process | process.html |
在sysinfo项目的主路由文件设置,使得访问转入到子应用的路由文件

在子应用的路由配置文件中写明:不同的访问路径,执行相应的视图函数

在子应用host中编写视图函数,
sysinfo/host/views.py :
from django.shortcuts import render
# Create your views here.
def index(request):passreturn render(request,'host/index.html',locals())
def user(request):passreturn render(request,'host/user.html',locals())
def cpu(request):passreturn render(request,'host/cpu.html',locals())
def memory(request):passreturn render(request,'host/memory.html',locals())
def disk(request):passreturn render(request,'host/disk.html',locals())
def network(request):passreturn render(request,'host/network.html',locals())
def process(request):passreturn render(request,'host/process.html',locals())
在template下新建host目录,并创建对应的HTML文件

至此,项目的框架搭建完成。
具体功能实现
系统信息展示
前端界面设计
新建 templates/host/base.html 文件:
<!DOCTYPE html>
<html {% block html_attribs %}{% endblock html_attribs %}>
<head>{% block head %}<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>{% block title %} {% endblock title %}</title><link rel="stylesheet" type="text/css" href="/static/css/bootstrap.css"><link rel="stylesheet" type="text/css" href="/static/css/my-style.css"><script src="/static/js/jquery-3.1.1.min.js"></script>{% endblock head %}
</head>
<body>
<div class="sysinfo"><div class="navbar navbar-inverse" role="navigation"><div class="container"><div class="navbar-header"><a class="navbar-brand" href="/">Sys Info</a></div><div class="navbar-collapse collapse"><ul class="nav navbar-nav"><li><a href="/">系统</a></li><li><a href="/cpu/">CPU</a></li><li><a href="/memory/">内存</a></li><li><a href="/disk/">硬盘</a></li><li><a href="/network/">网络</a></li><li><a href="/process/">进程</a></li><li><a href="/user/">用户</a></li></ul></div></div></div><div class="container">{% block content %}{% endblock %}</div>
</div>
</body>
</html>
在templates/host/index.html 文件中包含 base.html 文件:
{% extends 'host/base.html' %}
{% block title %}Sys Info{% endblock %}
{% block content %}<div class="page-header"><h1>系统信息</h1></div><div><table class="table table-bordered"><tr><td>主机名</td><td>{{ sys_name }}</td></tr><tr><td>内核名称</td><td>{{ kernel_name }}</td></tr><tr><td>发行版本号</td><td>{{ kernel_no }}</td></tr><tr><td>内核版本</td><td>{{ kernel_version }}</td></tr><tr><td>系统架构</td><td>{{ sys_framework }}</td></tr><tr><td>现在时间</td><td>{{ now_time }}</td></tr><tr><td>开机时间</td><td>{{ boot_time }}</td></tr><tr><td>运行时间</td><td>{{ up_time }}</td></tr></table></div>
{% endblock %}
编辑 settings.py 文件:

测试:发现能展示出首页效果。但是还没有数据显示。这是因为还没写视图函数,业务逻辑还没实现。

视图函数设计
如果是在Linux系统下,通过python执行Linux命令就能获取到主机信息。
查看主机名、操作系统、内核版本、系统架构:hostnamectl
查看系统名称: uname
查看系统开机时间、已经运行了多长时间: top、w、uptime、 cat /proc/uptime
查看内核版本、系统架构: uname -r
获取系统架构: hostnamectl | grep Architecture | awk -F : '{print $2}'
python中执行Linux命令的方式一:
命令直接输出结果。但是很多情况下,希望把结果存起来。
在Linux系统下:
执行 ipython 命令(安装:pip install ipython)
import os
cmd="hostnamectl | grep Architecture | awk -F : '{print $2}'"
os.system(cmd) #执行命令,直接输出命令结果
python中执行Linux命令的方式二:
Linux下:
输入 python3 命令
import os
os.popen('hostname') #返回的是一个文件对象
f= os.popen('hostname')
f.read() #输出结果值
os.popen('hostname').read()
如果是在Windows下,无法执行Linux命令,该如何获取Linux服务器的这些信息???
通过 psutil 模块
参考文章:https://www.cnblogs.com/saneri/p/7528283.html
安装 psutil

视图函数编辑 host/views.py
from datetime import datetime
from django.shortcuts import render
import psutil
import os,platform# Create your views here.
def index(request):try:info=os.uname()# linux系统下except:info=platform.uname() # Windows系统下sys_name=info.nodekernel_name=info.systemkernel_no=info.releasekernel_version=info.versionsys_framework=info.machineboot_time = datetime.fromtimestamp(psutil.boot_time())now_time = datetime.now()up_time = now_time - boot_timereturn render(request, 'host/index.html', locals())
测试:

用户信息展示
渲染就是将视图函数的变量信息填充到模板HTML页面中,最终返回给用户的过程。
视图函数设计
在 host/views.py 文件修改user 函数:
def user(request):users=psutil.users() #很多用户return render(request, 'host/user.html', locals())
自定义过滤器的实现
为了将用户登录时间显示的更友好,需要自定义过滤器。
自定义过滤器参考文档:https://docs.djangoproject.com/zh-hans/4.1/howto/custom-template-tags/
新建包 templatetags(包的名字是固定的)
新建python文件 timefilter.py ,实现过滤器

自定义的过滤器文件 timefilter.py :
from datetime import datetime
from django import template
register = template.Library() # 1、实例化库@register.filter(name='timefmt') # 3、注册过滤器
def timefmt(value): # 2、具体实现过滤器"""将时间戳转换为datetime类型的时间"""return datetime.fromtimestamp(value)
前端界面设计
编辑 templates/host/user.html 文件:
其中,extends 表示继承基模板
{% load timefilter %} 表示加载自定义过滤器文件
{{ user.started | timefmt }} 表示使用过滤器。这个过滤器可以是内置过滤器,也可以自定义过滤器
{% extends 'host/base.html' %}
{% load timefilter %}
{% block title %} 用户信息 {% endblock %}
{% block content %}<div class="page-header"><h1> 登录用户 </h1></div><div><table class="table table-bordered"><tr><td>用户名</td><td>登录主机</td><td>终端</td><td>登录时间</td></tr>{% for user in users %}<tr><td>{{ user.name }}</td><td>{{ user.host }}</td><td>{{ user.terminal }}</td><td>{{ user.started | timefmt }}</td></tr>{% endfor %}</table></div>
{% endblock %}
项目里添加文件之后,需要重启项目才能生效
测试:

相关文章:
12.1 基于Django的服务器信息查看应用(系统信息、用户信息)
文章目录新建Django项目创建子应用并设置本地化创建数据库表创建超级用户git管理项目(requirements.txt、README.md、.ignore)主机信息监控应用的框架搭建具体功能实现系统信息展示前端界面设计视图函数设计用户信息展示视图函数设计自定义过滤器的实现前…...
ExSwin-Unet 论文研读
ExSwin-Unet摘要1 引言2 方法2.1 基于窗口的注意力块2.2 外部注意力块2.3 不平衡的 Unet 架构2.4 自适应加权调整2.5 双重损失函数3 实验结果3.1 数据集3.2 实现细节3.3 与 SOTA 方法的比较3.4 消融研究4 讨论和限制5 结论数据集来源: https://feta.grand-challenge…...
置顶!!!主页禁言提示原因:在自己论坛发动态误带敏感词,在自己论坛禁止评论90天
置顶!!!主页禁言提示原因:在自己论坛发动态误带敏感词,在自己论坛禁止评论90天 置顶!!!主页禁言提示原因:在自己论坛发动态误带敏感词,在自己论坛禁止评论90天…...
优思学院|解密六西格玛:探索DMAIC和DMADV之间的区别
六西格玛方法中最为广泛使用的两种方法是DMAIC和DMADV。这两种方法都是为了让企业流程更加高效和有效而设计的。虽然这两种方法有一些重要的共同特点,但它们并不可以互相替代,并且被开发用于不同的企业流程。在更详细地比较这两种方法之前,我…...
Pytorch的DataLoader输入输出(以文本为例)
本文不做太多原理介绍,直讲使用流畅。想看更多底层实现-〉传送门。DataLoader简介torch.utils.data.DataLoader是PyTorch中数据读取的一个重要接口,该接口定义在dataloader.py脚本中,只要是用PyTorch来训练模型基本都会用到该接口。本文介绍t…...
代谢组学:Microbiome又一篇!绘制重症先天性心脏病新生儿肠道微生态全景图谱
文章标题:Mapping the early life gut microbiome in neonates with critical congenital heart disease: multiomics insights and implications for host metabolic and immunological health 发表期刊:Microbiome 影响因子:16.837…...
Java基本类型所占字节简述
类型分类所占字节取值范围boolean布尔型1bit0 false、 1 true (1个bit 、1个字节、4个字节)char 字符型(Unicode字符集中的一个元素) 2字节-32768~32767(-2的15次方~2的15次方-1)byte整型1字节-128&a…...
Linux vi常用操作
vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是: 命令模式: 用户刚…...
Unicode(宽字节)、ANSI(多字节)
1、什么时候用Unicode(宽字节),什么时候用ANSI(多字节)? 在linux/windows等操作系统中使用的,一般都是Unicode(宽字节)。 下位机PLC/单片机等硬件设备中使用,一般都是ANSI(多字节)。 所以,通讯中(比如VS项目&#x…...
STM32实战之LED循环点亮
接着上一章讲。本章我们来讲一讲LED流水灯,循环点亮LED。 在LED章节有的可能没有讲到,本章会对其进行说明,尽量每个函数说一下作用。也会在最后说一下STM32的寄存器,在编程中寄存器是避免不了的东西,寄存器也是非常好理…...
智慧厕所智能卫生间系统有哪些功能
南宁北站智能厕所主要功能有哪些?1、卫生间环境空气监测男厕、女厕环境空气监测系统包括对厕所内的温度、湿度、氨气、硫化氢、PM2.5、烟雾等气体数据的实时监测。2、卫生间厕位状态监测系统实时监测厕位内目前的使用状态(有人或无人),数据信…...
【网络】套接字 -- TCP
🥁作者: 华丞臧. 📕专栏:【网络】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文章…...
NDK C++ map容器
map容器// TODO map容器 #include <iostream> #include <map>using namespace std;int main() {// TODO map<int, string>按key值排序,同一个key不可以重复插入map<int, string> map1;map1.insert(pair<int, string>(1, "111&qu…...
linux(Centos)安装docker
官网地址:Install Docker Engine on CentOS 首先检查linux系统版本及内核: 安装docker要求系统版本至少为7.x版本,内核至少为3.8以上 cat /etc/redhat-release # 查看系统版本号uname -r #查看linux系统内核 检查系统是否能连上外网&#…...
Delphi 中 FireDAC 数据库连接(处理错误)
参见:Delphi 中 FireDAC 数据库连接(总览)本主题描述了如何用FireDAC处理数据库错误。一、概述EFDDBEngineException类是所有DBMS异常的基类。单个异常对象是一个数据库错误的集合,可以通过EFDDBEngineException.Errors[]属性访问…...
算法小抄3-理解使用Python容器之列表
引言 首先说一个概念哈,程序算法数据结构,算法是条件语句与循环语句组成的逻辑结构,而数据结构也就是容器. 算法决定数据该如何处理,而容器则决定如何数据如何存储. 不同的语言对容器有不同的实现方式, 但他们的功能都是相似的, 打好容器基础,你就可以在各式各样的语言中来回横…...
Vue3中watch的value问题
目录前言一,ref和reactive的简单复习1.ref函数1.2 reactive函数1.3 用ref定义对象类型数据不用reactive二,watch的value问题2.1 ref2.1.1 普通类型数据2.1.2 对象类型数据2.1.3 另一种方式2.2 reactive三,总结后记前言 在Vue3中,…...
【线性筛+DP】最大和
看错题了,呃呃,其实就是个简单DP最大和 - 蓝桥云课 (lanqiao.cn)题意:思路:设dp[i]为以1为终点的最大和,然后枚举状态和决策就行了主要是线性筛的应用,它可以预处理出一个数的最小质因子是多少Code…...
openpnp - configure - 丢弃(Discard)位置的设置
文章目录openpnp - configure - 丢弃(Discard)位置的设置概述笔记设置丢弃位置吸取元件失败后, 吸嘴一直吸气的处理ENDopenpnp - configure - 丢弃(Discard)位置的设置 概述 测试时, 吸取了一个元件, 吸取成功了, 现在想将这个料丢掉. 点击控制面板-Special页中的Discard不好…...
java Object 万字详解 (通俗易懂)
基本介绍构造方法成员方法hashCode()getClass()toString()equals()finalize()JavaBean重写Object类的方法重写toString重写equals一、基本介绍Object类是java类层次最顶层的基类(父类),所有类都是直接或间接继承自Object类,因此&a…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
