当前位置: 首页 > news >正文

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.indexindex.html
/user/views.useruser.html
/cpu/views.cpucpu.html
/memory/views.memorymemory.html
/disk/views.diskdisk.html
/network/views.networknetwork.html
/process/views.processprocess.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管理项目&#xff08;requirements.txt、README.md、.ignore&#xff09;主机信息监控应用的框架搭建具体功能实现系统信息展示前端界面设计视图函数设计用户信息展示视图函数设计自定义过滤器的实现前…...

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 结论数据集来源&#xff1a; https://feta.grand-challenge…...

置顶!!!主页禁言提示原因:在自己论坛发动态误带敏感词,在自己论坛禁止评论90天

置顶&#xff01;&#xff01;&#xff01;主页禁言提示原因&#xff1a;在自己论坛发动态误带敏感词&#xff0c;在自己论坛禁止评论90天 置顶&#xff01;&#xff01;&#xff01;主页禁言提示原因&#xff1a;在自己论坛发动态误带敏感词&#xff0c;在自己论坛禁止评论90天…...

优思学院|解密六西格玛:探索DMAIC和DMADV之间的区别

六西格玛方法中最为广泛使用的两种方法是DMAIC和DMADV。这两种方法都是为了让企业流程更加高效和有效而设计的。虽然这两种方法有一些重要的共同特点&#xff0c;但它们并不可以互相替代&#xff0c;并且被开发用于不同的企业流程。在更详细地比较这两种方法之前&#xff0c;我…...

Pytorch的DataLoader输入输出(以文本为例)

本文不做太多原理介绍&#xff0c;直讲使用流畅。想看更多底层实现-〉传送门。DataLoader简介torch.utils.data.DataLoader是PyTorch中数据读取的一个重要接口&#xff0c;该接口定义在dataloader.py脚本中&#xff0c;只要是用PyTorch来训练模型基本都会用到该接口。本文介绍t…...

代谢组学:Microbiome又一篇!绘制重症先天性心脏病新生儿肠道微生态全景图谱

文章标题&#xff1a;Mapping the early life gut microbiome in neonates with critical congenital heart disease: multiomics insights and implications for host metabolic and immunological health 发表期刊&#xff1a;Microbiome 影响因子&#xff1a;16.837…...

Java基本类型所占字节简述

类型分类所占字节取值范围boolean布尔型1bit0 false、 1 true (1个bit 、1个字节、4个字节)char ​字符型&#xff08;Unicode字符集中的一个元素&#xff09;​ 2字节-32768&#xff5e;32767&#xff08;-2的15次方&#xff5e;2的15次方-1&#xff09;byte整型1字节-128&a…...

Linux vi常用操作

vi/vim 共分为三种模式&#xff0c;分别是命令模式&#xff08;Command mode&#xff09;&#xff0c;输入模式&#xff08;Insert mode&#xff09;和底线命令模式&#xff08;Last line mode&#xff09;。 这三种模式的作用分别是&#xff1a; 命令模式&#xff1a; 用户刚…...

Unicode(宽字节)、ANSI(多字节)

1、什么时候用Unicode(宽字节)&#xff0c;什么时候用ANSI(多字节)&#xff1f; 在linux/windows等操作系统中使用的&#xff0c;一般都是Unicode(宽字节)。 下位机PLC/单片机等硬件设备中使用&#xff0c;一般都是ANSI(多字节)。 所以&#xff0c;通讯中(比如VS项目&#x…...

STM32实战之LED循环点亮

接着上一章讲。本章我们来讲一讲LED流水灯&#xff0c;循环点亮LED。 在LED章节有的可能没有讲到&#xff0c;本章会对其进行说明&#xff0c;尽量每个函数说一下作用。也会在最后说一下STM32的寄存器&#xff0c;在编程中寄存器是避免不了的东西&#xff0c;寄存器也是非常好理…...

智慧厕所智能卫生间系统有哪些功能

南宁北站智能厕所主要功能有哪些&#xff1f;1、卫生间环境空气监测男厕、女厕环境空气监测系统包括对厕所内的温度、湿度、氨气、硫化氢、PM2.5、烟雾等气体数据的实时监测。2、卫生间厕位状态监测系统实时监测厕位内目前的使用状态(有人或无人&#xff09;&#xff0c;数据信…...

【网络】套接字 -- TCP

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【网络】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449; LeetCode刷题网站 文章…...

NDK C++ map容器

map容器// TODO map容器 #include <iostream> #include <map>using namespace std;int main() {// TODO map<int, string>按key值排序&#xff0c;同一个key不可以重复插入map<int, string> map1;map1.insert(pair<int, string>(1, "111&qu…...

linux(Centos)安装docker

官网地址&#xff1a;Install Docker Engine on CentOS 首先检查linux系统版本及内核&#xff1a; 安装docker要求系统版本至少为7.x版本&#xff0c;内核至少为3.8以上 cat /etc/redhat-release # 查看系统版本号uname -r #查看linux系统内核 检查系统是否能连上外网&#…...

Delphi 中 FireDAC 数据库连接(处理错误)

参见&#xff1a;Delphi 中 FireDAC 数据库连接&#xff08;总览&#xff09;本主题描述了如何用FireDAC处理数据库错误。一、概述EFDDBEngineException类是所有DBMS异常的基类。单个异常对象是一个数据库错误的集合&#xff0c;可以通过EFDDBEngineException.Errors[]属性访问…...

算法小抄3-理解使用Python容器之列表

引言 首先说一个概念哈,程序算法数据结构,算法是条件语句与循环语句组成的逻辑结构,而数据结构也就是容器. 算法决定数据该如何处理,而容器则决定如何数据如何存储. 不同的语言对容器有不同的实现方式, 但他们的功能都是相似的, 打好容器基础,你就可以在各式各样的语言中来回横…...

Vue3中watch的value问题

目录前言一&#xff0c;ref和reactive的简单复习1.ref函数1.2 reactive函数1.3 用ref定义对象类型数据不用reactive二&#xff0c;watch的value问题2.1 ref2.1.1 普通类型数据2.1.2 对象类型数据2.1.3 另一种方式2.2 reactive三&#xff0c;总结后记前言 在Vue3中&#xff0c;…...

【线性筛+DP】最大和

看错题了&#xff0c;呃呃&#xff0c;其实就是个简单DP最大和 - 蓝桥云课 (lanqiao.cn)题意&#xff1a;思路&#xff1a;设dp[i]为以1为终点的最大和&#xff0c;然后枚举状态和决策就行了主要是线性筛的应用&#xff0c;它可以预处理出一个数的最小质因子是多少Code&#xf…...

openpnp - configure - 丢弃(Discard)位置的设置

文章目录openpnp - configure - 丢弃(Discard)位置的设置概述笔记设置丢弃位置吸取元件失败后, 吸嘴一直吸气的处理ENDopenpnp - configure - 丢弃(Discard)位置的设置 概述 测试时, 吸取了一个元件, 吸取成功了, 现在想将这个料丢掉. 点击控制面板-Special页中的Discard不好…...

java Object 万字详解 (通俗易懂)

基本介绍构造方法成员方法hashCode()getClass()toString()equals()finalize()JavaBean重写Object类的方法重写toString重写equals一、基本介绍Object类是java类层次最顶层的基类&#xff08;父类&#xff09;&#xff0c;所有类都是直接或间接继承自Object类&#xff0c;因此&a…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...