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…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...