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…...
Java并发简介(什么是并发)
文章目录并发概念并发和并行同步和异步阻塞和非阻塞进程和线程竞态条件和临界区管程并发的特点提升资源利用率程序响应更快并发的问题安全性问题缓存导致的可见性问题线程切换带来的原子性问题编译优化带来的有序性问题保证并发安全的思路互斥同步(阻塞同步…...
团队API管理工具-YAPI
团队API管理工具-YAPI 推荐一款接口管理平台,操作简单、界面友好、功能丰富、支持markdown语法、可使用Postman导入、Swagger同步数据展示、LDAP、权限管理等功能。 YApi是高效、易用、功能强大的api管理平台,旨在为开发、产品、测试人员提供更优雅的接…...
学习记录 --- Pytorch优化器
文章目录参考文献什么是优化器optimizer的定义optimizer的属性defaultsstateparam_groupsoptimizer的方法zero_grad()step()add_param_group()state_dict()、load_state_dict()优化一个网络同时优化多个网络当成一个网络优化当成多个网络优化只优化网络的某些指定的层调整学习率…...
Flink State 状态后端分析
flink状态实现分析 state * State* |* -------------------InternalKvState* | |* MergingState |* | |* …...
和年薪30W的阿里测开工程师聊过后,才知道我的工作就是打杂的...
前几天和一个朋友聊面试,他说上个月同时拿到了腾讯和阿里的offer,最后选择了阿里。 阿里内部将员工一共分为了14个等级,P6是资深工程师,P7是技术专家。 其中P6和P7就是一个分水岭了,P6是最接近P7的不持股员工&#x…...
C#开发的OpenRA的界面布局数据加载
C#开发的OpenRA的界面布局数据加载 当显示完成加载界面之后,就是进行其它内容处理。 因为后面内容的加载会比较长时间,所以首先显示加载界面是一种非常友好的方法。 因此在软件设计里,尽可能先显示界面,让用户先看到程序正在运行, 然后再处理时间长的加载。如果不这样做,…...
并查集结构
文章目录并查集特点构建过程查找两个元素是否是同一集合优化查找领头元素设置两个元素为同一集合构建结构应用场景并行计算集合问题并查集特点 对于使用并查集构建的结构,可以使得查询两个元素是否在同一集合,以及合并集合的操作无限接近O(1) 构建过程…...
全国CSM敏捷教练认证将于2023年3月25-26开班,报名从速!
CSM,即Certified Scrum Master,是Scrum联盟发起的Scrum认证。 CSM可以帮助团队正确使用Scrum,从而提高项目整体成功的可能性。 CSM深刻理解Scrum的价值观、实践以及Scrum框架。 CSM是“服务型领导”,帮助Scrum团队一起紧密合作。 …...
JavaEE进阶第六课:SpringBoot ⽇志⽂件
上篇文章介绍了SpringBoot配置文件,这篇文章我们将会介绍SpringBoot ⽇志⽂件 荔枝1.日志有什么用2.自定义日志输出2.1获取程序日志对象2.2使用相关方法输出日志2.3日志级别2.3.1日志级别的作用2.3.2日志级别如何设置2.4日志格式3.持久化日志4.更简单的日志输出4.1使…...
外置MOS管平均电流型LED降压恒流驱动器
产品描述 AP5125 是一款外围电路简单的 Buck 型平均电 流检测模式的 LED 恒流驱动器,适用于 8-100V 电压 范围的非隔离式大功率恒流 LED 驱动领域。芯片采用 固定频率 140kHz 的 PWM 工作模式, 利用平均电 流检测模式,因此具有优异的负载调整…...
网站落地页怎么做的/百度6大核心部门
用户的权限都是以权限组来分配的:相关的几个表如下:security_groupsecurity_permissionsecurity_group_permissionsecurity_permission_auto_grantuser_login_security_group系统中没有权限的定义,只有安全组的定义,权限都是系统初…...
手机网站首页怎么做/技术优化seo
原文地址:http://www.gameres.com/211571.html 当你克服重重困难终于开发出了自己的App,下一步就是向App Store提交应用了,这时应该如何操作呢?我的App真的准备好提交了?我敢肯定这些问题将会浮现在你的脑海。基于这篇…...
加强网站信息怎么做/seo排名优化软件有
我们身边的电磁波越来越多了。随着无线路由器的普及,无线网络信号似乎每天24小时辐射着我们。那么我们不禁要问问,WIFI对人究竟有没有危害? 这个问题总是不断地被提及,简而言之,答案是不会。事实上,将您的问题换一个方…...
购物券网站怎么做/青岛网络推广公司排名
先下载MAT http://www.eclipse.org/mat/downloads.php然后打开压缩包的分析工具然后在Android Studio 3.1.2上打开Android Profile gc dump然后在profile的左上角有个门一样的图标 点击导出到电脑本地 我这里是C:\AS\Project\ArcFaceDemo\.gradle\test.hprof 然后打开cmd C:\AS…...
中企动力做网站价格/百度seo文章
昨天是周五太放松了,晚上没有加班只顾着放松,玩了一晚上,今天又是睡了一上午,没有学习。这下放松过分了没有总结,也没有完成任务。今天来总结一下昨天的学习成果。 昨天设计的数据库今天老大点评了一下发现问题确实很多…...
深圳市年年卡网络科技有限公司/seo网站推广是什么
仅作为记录,大佬请跳过。 加入,dtypetorch.float即可 #label torch.full((b_size,), real_label, devicedevice)label torch.full((b_size,), real_label, devicedevice,dtypetorch.float)参考 感谢大佬博主文章传送门...