Python之Django实例--sysinfo项目搭建(中文版 Linux 服务器信息查看应用)
文章目录
- 1. 创建项目
- 1.1 创建项目
- 1.2 创建App
- 1.3 配置setting
- 1.4 生成迁移文件并设置管理员
- 1.5 测试是否配置成功
- 1.6 git 提交
- 1.6.1 设置忽略文件
- 1.6.2 生成requirements.txt文件
- 1.6.3 创建README.md文件
- 1.6.4 git提交
- 2. 搭建框架
- 2.1 搭建框架流程
- 2.2 git提交
- 3. 主页信息的配置index
- 3.1 配置文件
- 3.2 启动服务器进行测试
- 3.3 使用基模板测试效果
- 3.4 git 提交
- 4. 用户登录界面
- 4.1 user登陆界面的文件配置
- 4.2 测试效果
- 4.3 git提交
- 5. cpu信息的展示
- 5.1 展示cpu信息
- 5.2 基于echarts绘制cpu扇形图
- 5.3 效果图
- 5.4 git提交
- 6. celery定时任务和异步任务
- 6.1 安装redis
- 6.3 配置定时任务
- 6.4 启动worker
- 6.5 编写定时任务
- 6.6 使用定时任务
- 6.6.1注册app
- 6.6.2 数据库变更
- 6.6.3 后端访问
1. 创建项目
sysinfo项目网址: https://github.com/hypersport/sysinfo
psutil的详细介绍: https://www.cnblogs.com/saneri/p/7528283.html
windows安装redis: https://www.redis.com.cn/redis-installation.html
redis桌面版下载地址: (https://pan.baidu.com/s/1ihWvjsCk6-Jw3OWhm5o33g
- sysinfo 使用 Python Flask 框架和 psutil 开发的一个中文版 Linux 服务器信息查看应用,可查看的信息包括系统、CPU、内存、硬盘、进程、网络、登录用户等,同时可查看并导出部分数据的图表。
1.1 创建项目
1.2 创建App
1.3 配置setting
1.4 生成迁移文件并设置管理员
python manage.py makemigrations ##生成迁移脚本python manage.py migrate # 将迁移脚本的内容写入数据库并创建数据库表python manage.py createsuperuser # 创建后台登录的超级用户
1.5 测试是否配置成功
1.6 git 提交
1.6.1 设置忽略文件
1.6.2 生成requirements.txt文件
1.6.3 创建README.md文件
1.6.4 git提交
(venv) D:\pycharm pro\sysinfo>git init
(venv) D:\pycharm pro\sysinfo>git add *
(venv) D:\pycharm pro\sysinfo>git commit -m "add requirements.txt and README.md"
(venv) D:\pycharm pro\sysinfo>git log
2. 搭建框架
2.1 搭建框架流程
#sysinfo/urls.py ##主urls
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('', include('host.urls')),
]## host/urls.py app对应的urls,为了关联视图函数
from django.contrib import admin
from django.urls import path, include
from .views import *
urlpatterns = [path('', index, name='index'),path('user/', user, name='user'),path('cpu/', cpu, name='cpu'),path('memory/', memory, name='memory'),path('disk/', disk, name='disk'),path('network/', network, name='network'),path('process/', process, name='process'),
]
#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())
2.2 git提交
##gitee建立新的仓库sysinfo
(venv) D:\pycharm pro\sysinfo>git add *
(venv) D:\pycharm pro\sysinfo>git commit -m "搭建框架"(venv) D:\pycharm pro\sysinfo>git remote add origin https://gitee.com/dan-2021/sysinfo.git ##关联仓库
(venv) D:\pycharm pro\sysinfo>git push ##获取提示git push --set-upstream origin master
(venv) D:\pycharm pro\sysinfo>git push --set-upstream origin master
(venv) D:\pycharm pro\sysinfo>git push --set-upstream origin master -f ##如果仓库没东西可以强制覆盖,生产环境不推荐
3. 主页信息的配置index
3.1 配置文件
基模板就相当于一个框架,别的模板导入之后,只需要修改基模板中可以修改的部分即可。psutil模块信息
<!-- 基模板 -->
<!-- templates/host/base.html -->
<!DOCTYPE html>
<html {% block html_attribs %}{% endblock html_attribs %}>
<head>{% block head %} <!-- 这里面可以自定义head 和title --><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>
<!-- index.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 %}
(venv) D:\pycharm pro\sysinfo> pip install psutil ##安装psutil模块#host/views.py ##视图函数新增内容
from datetime import datetime
from django.shortcuts import render
import psutil ##导入psutil模块
import os, platform
# Create your views here.
def index(request):"""sys_namekernel_namekernel_nokernel_versionsys_frameworknow_timeboot_timeup_time"""try:info = os.uname() ##linux系统是os.unameexcept Exception as e:info = platform.uname() ##windows系统是platform.unamesys_name = info.node ##window和linux执行查询命令显示的参数kernel_name = info.systemkernel_no = info.releasekernel_version = info.versionsys_framework = info.machineboot_time = datetime.fromtimestamp(psutil.boot_time())now_time = datetime.now()print(boot_time, now_time)up_time = now_time - boot_timereturn render(request, 'host/index.html', locals())##sysinfo/settings新增内容 声明使用的是static文件夹内容。
STATICFILES_DIRS = [BASE_DIR / "static",
]
STATIC_URL = '/static/'##配置完成启动服务器
(venv) D:\pycharm pro\sysinfo>python manage.py runserver
3.2 启动服务器进行测试
3.3 使用基模板测试效果
##templates/disk.html
{% include 'host/base.html' %} ##导入基模板{% block title %} ##相当于配置变量信息磁盘信息
{% endblock %}{% block content %}
<h3>disk的内容</h3>
{% endblock %}
3.4 git 提交
4. 用户登录界面
4.1 user登陆界面的文件配置
##views下cpu的视图函数
##host/views.py
def user(request):users = psutil.users()return render(request, 'host/user.html', locals())
#/host/templatetags/timefilter.py
"""
自定义过滤器实现的方法:
https://docs.djangoproject.com/zh-hans/3.1/howto/custom-template-tags/
"""
from django import template
from datetime import datetime
register = template.Library()@register.filter(name='timefmt') ##俩种方法,这里使用的是装饰器的方法。
def timefmt(value):"""将时间戳转换成datetime类型的时间"""return datetime.fromtimestamp(value)
### templates/host/user.html
{% 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> <!-- tr行 , td 列 --><td>用户名</td><td>登录主机</td><td>终端</td><td>登录时间</td></tr>{% for user in users %} <!-- 循环用户并获取信息 --><tr><td>{{ user.name }}</td><td>{{ user.terminal }}</td><td>{{ user.host }}</td><td>{{ user.started | timefmt }}</td> <!--使用过滤器,可以是内置过滤器,也可以是自定义过滤器 --></tr>{% endfor %}</table></div>
{% endblock %}
4.2 测试效果
4.3 git提交
5. cpu信息的展示
5.1 展示cpu信息
##/host/templatetags/timefilter.py
"""
自定义过滤器实现的方法:
https://docs.djangoproject.com/zh-hans/3.1/howto/custom-template-tags/
"""
from django import template
from datetime import datetime
register = template.Library()@register.filter(name='timefmt')
def timefmt(value):"""将时间戳转换成datetime类型的时间"""return datetime.fromtimestamp(value)@register.filter(name='cpu_val_fmt') ##添加的自定义过滤器
def cpu_val_fmt(value):return round(value/1000, 2)
### templates/host/cpu.html
<!-- cpu页面展示-->
{% extends 'host/base.html' %}
{% load timefilter %}
{% block title %} cpu信息 {% endblock %}
{% block content %}<div class="page-header"><a {% if not chart %}id="display"{% endif %} href="/cpu/">CPU 信息</a><a {% if chart == 'line' %}id="display"{% endif %} href="/cpu/">CPU折线图</a><a {% if chart == 'pie' %}id="display"{% endif %} href="/cpu/">CPU 饼图</a></div><div><div id="cpu_info"><table class="table table-bordered"><tr><td>物理 CPU 核心数</td><td>{{ physical_core_num }}</td></tr><tr><td>逻辑 CPU 核心数</td><td>{{ logical_core_num }}</td></tr><tr><td>最近 1 分钟平均负载</td><td>{{ load_avg.0 }}</td></tr><tr><td>最近 5 分钟平均负载</td><td>{{ load_avg.1 }}</td></tr><tr><td>最近 15 分钟平均负载</td><td>{{ load_avg.2 }}</td></tr><tr><td>用户</td><td>{{ cpu_time_percent.user }} %</td></tr><tr><td>系统</td><td>{{ cpu_time_percent.system }} %</td></tr><tr><td>空闲</td><td>{{ cpu_time_percent.idle }} %</td></tr>{% if cpu_time_percent.nice %}<tr><td>nice</td><td>{{ cpu_time_percent.nice }} %</td></tr>{% endif %}{% if cpu_time_percent.iowait %}<tr><td>iowait</td><td>{{ cpu_time_percent.iowait }} %</td></tr>{% endif %}{% if else_percent %}<tr><td>其他</td><td>{{ else_percent }} %</td></tr>{% endif %}{% if cpu_freq %}<tr><td>正在运行频率</td><td>{{ cpu_freq.current | cpu_val_fmt }} GHz</td></tr><tr><td>最低运行频率</td><td>{{ cpu_freq.min | cpu_val_fmt }} GHz</td></tr><tr><td>最高运行频率</td><td>{{ cpu_freq.max | cpu_val_fmt }} GHz</td></tr>{% endif %}</table></div>{% endblock %}
##views下cpu的视图函数 host/views.py
def cpu(request):logical_core_num = psutil.cpu_count() #physical_core_num = psutil.cpu_count(logical=False)try:load_avg = os.getloadavg()except Exception as e:load_avg = ['', '', '']cpu_time_percent = psutil.cpu_times_percent()else_percent = 0.0for i in range(5):else_percent += cpu_time_percent[i]try:cpu_freq = psutil.cpu_freq()except AttributeError:cpu_freq = Nonereturn render(request, 'host/cpu.html', locals())
5.2 基于echarts绘制cpu扇形图
echarts绘制扇形图 echatrs官网: http://echarts.apache.org/zh/index.html
##host/urls
from django.contrib import admin
from django.urls import path, include
from .views import *
urlpatterns = [path('', index, name='index'),path('user/', user, name='user'),path('cpu/', cpu, name='cpu'),path('cpu/<str:chart>/', cpu, name='cpu'), #指定名字path('memory/', memory, name='memory'),path('disk/', disk, name='disk'),path('network/', network, name='network'),]##host/views
def cpu(request, chart=None):logical_core_num = psutil.cpu_count() #physical_core_num = psutil.cpu_count(logical=False)try:load_avg = os.getloadavg()except Exception as e:load_avg = ['', '', '']cpu_time_percent = psutil.cpu_times_percent()else_percent = 0.0for i in range(3, 5):else_percent += cpu_time_percent[i]try:cpu_freq = psutil.cpu_freq()except AttributeError:cpu_freq = Noneif chart == 'line':return render(request, 'host/cpu-line.html', locals())elif chart == 'pie':return render(request, 'host/cpu-pie.html', locals())return render(request, 'host/cpu.html', locals())##host/modules.py ##此处的modules是为了之后的折线图做准备的
from django.db import models
# 定时任务定期扫描并存储。
class UserCpuPercent(models.Model):create_time = models.DateTimeField(auto_now_add=True, verbose_name="扫描时间")user_percent = models.FloatField(verbose_name="用户CPU占用百分比")##配置了modules文件需要重新生成数据库迁移文件
(venv) D:\pycharm pro\sysinfo>python manage.py makemigrations
(venv) D:\pycharm pro\sysinfo>python manage.py migrate<!-- templates/base.html-->
<script src="https://lib.baomitu.com/echarts/5.0.2/echarts.min.js"></script> <!-- 使用的是在线的js模板 --><!-- templates/cpu.html -->{% include 'host/cpu-header.html' %}
<!-- templates/cpu-header.html -->
<div class="page-header"><a {% if not chart %}id="display"{% endif %} href="/cpu/">CPU 信息</a><a {% if chart == 'line' %}id="display"{% endif %} href="/cpu/line/">CPU 折线图</a><a {% if chart == 'pie' %}id="display"{% endif %} href="/cpu/pie/">CPU 饼图</a>
</div>
<!-- templates/cpu-line.html 做一个简单测试 -->
{% extends 'host/base.html' %}
{% load timefilter %}
{% block title %} cpu信息 {% endblock %}
{% block content %}{% include 'host/cpu-header.html' %}<div><div id="main" style="width: 80%;height:400px;"></div></div><script type="text/javascript">// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('main'));option = {xAxis: {type: 'category',data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']},yAxis: {type: 'value'},series: [{data: [820, 932, 901, 934, 1290, 1330, 1320],type: 'line',smooth: true}]};// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);</script>
{% endblock %}
<!-- templates/cpu-pie.html -->
{% extends 'host/base.html' %}
{% load timefilter %}
{% block title %} cpu信息 {% endblock %}
{% block content %}{% include 'host/cpu-header.html' %}<div><div id="main" style="width: 80%;height:400px;"></div></div><script type="text/javascript">// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('main'));option = {tooltip: {trigger: 'item'},legend: {top: '5%',left: 'center'},series: [{name: 'CPU占用百分比分类',type: 'pie',radius: ['40%', '70%'],avoidLabelOverlap: false,itemStyle: {borderRadius: 10,borderColor: '#fff',borderWidth: 2},label: {show: false,position: 'center'},emphasis: {label: {show: true,fontSize: '40',fontWeight: 'bold'}},labelLine: {show: false},data: [{value: {{ cpu_time_percent.user }}, name: '用户'},{value: {{ cpu_time_percent.system }}, name: '系统'},{value: {{ cpu_time_percent.idle }}, name: '空闲'},]}]};// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);</script>
{% endblock %}
5.3 效果图
5.4 git提交
6. celery定时任务和异步任务
- Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统。大白话理解处理异步任务和定时任务
的工具。
工作原理如下图:
6.1 安装redis
redis桌面版下载地址
在 windows 上安装 Redis
到指定目录启动redis 如果出错执行reids-cli.exe,shutdown,exit,在执行启动命令。
6.3 配置定时任务
(venv) D:\pycharm pro\sysinfo>pip install celery
(venv) D:\pycharm pro\sysinfo>pip install django-celery-beat#sysinfo/celery.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
# 设置django环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'sysinfo.settings')
app = Celery('sysinfo')
# 使用CELERY_ 作为前缀,在settings中写配置
app.config_from_object('django.conf:settings', namespace='CELERY')
# 发现任务文件每个app下的task.py
app.autodiscover_tasks()#sysinfo/__init__.py
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app'] #将app展示出来,不然访问不到定时任务 #sysinfo/settings.py 文件内容,celery configure,必须安装redis
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0' # Broker配置,使用Redis作为消息中间件
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/1' # BACKEND配置,这里使用redis
CELERY_RESULT_SERIALIZER = 'json' # 结果序列化方案
6.4 启动worker
>pip install eventlet
>pip install redis
>pip install django-celery-beat>Celery -A sysinfo worker -l info -P eventlet #安装包之后执行这条命令,连接数据库成功。worker启动成功
6.5 编写定时任务
#host/tasks.py ##用于定时任务
import psutil
from celery import shared_task
from host.models import UserCpuPercent
@shared_task() ##装饰器共享任务
def scan_cpu_info():percent = UserCpuPercent( user_percent=psutil.cpu_times_percent().user) ##获取用户占用cpu百分比percent.save()
6.6 使用定时任务
6.6.1注册app
6.6.2 数据库变更
(venv) D:\pycharm pro\sysinfo>python manage.py makemigrations
(venv) D:\pycharm pro\sysinfo>python manage.py migrate
6.6.3 后端访问
Python之Django实例--sysinfo项目搭建(中文版 Linux 服务器信息查看应用)相关推荐
- 项目部署到Linux服务器上 (全)linux服务器安装java mysql 配置
项目部署到Linux服务器上 (全) 1.服务器准备 首先你需要购买一台云服务器 我是领取的阿里云的服务器 选择linux系统 设置好 服务器的密码 忘记可以在 控制台首页 云服务器ECS 里面找到购 ...
- springboot项目部署到Linux服务器
按照yum方式安装jdk成功 Linux系统下安装jdk及环境配置(两种方法)_橙子君的博客-CSDN博客_linux配置jdk这里介绍两种linux环境下jdk的安装以及环境配置方法在windows ...
- 开发笔记--项目部署到linux服务器
安卓app后端项目部署到linux服务器,通过创建screen窗体,管理linux会话不会随着shell连接窗口的关闭而被杀掉进程.本文章为个人笔记,欢迎各位大牛给予宝贵意见和建议. Xshell远程 ...
- 基于Django框架的sysinfo项目搭建---系统信息监控(主机名,内核版本等)
目录 主机信息监控 项目搭建 基础框架构建 首页系统信息展示完善 主机信息监控 项目搭建 详情见前篇博客 创建子应用host并且设置本地化 数据库表的创建和超级用户的创建 git管理项目(requir ...
- 免费搭建虚拟机Linux服务器,附带部署项目和内网穿透教程(亲测有效)cd
最近在学习Linux服务器上进行项目部署,大家都知道在云服务器上可以部署项目,这可以使得在任何地方都可以访问到项目.但购买服务器是要收费的,这使得我十分香菇....但是还有办法的,在VMware虚拟机 ...
- filezilla 设置服务器_java项目部署到linux服务器,微信小程序后台springboot项目部署到腾讯云服务器(图文详解)...
前面给大家讲了一个点餐系统的开发,包括java点餐后台和微信点餐小程序.可是都是教大家如何在本地把项目跑起来.今天就来教大家如何把这个点餐系统部署到服务器,实现商用. 传送门 点餐系统的开发,java ...
- springboot 获取登录浏览器_java项目部署到linux服务器,微信小程序后台springboot项目部署到云服务器(图文详解)...
前面给大家讲了一个点餐系统的开发,包括java点餐后台和微信点餐小程序.可是都是教大家如何在本地把项目跑起来.今天就来教大家如何把这个点餐系统部署到服务器,实现商用. 传送门 点餐系统的开发,java ...
- 利用vmware在自己的个人电脑上面搭建虚拟linux服务器
学习linux的第一步当然是搭建一个linux环境了 搭建linux环境有两种选择:第一种不差钱的,直接弄一台物理机,这个的话基本不在本次介绍范围内. 第二种就是搭建虚拟机,利用自己个人电脑虚拟出一个 ...
- 搭建 SVN Linux服务器
前: 需求: 应美术项目组要求,搭建一台SVN版本控制服务器,以供后续版本的保存 环境: SVN服务器:采用Linux端(较为稳定,当然也可以选择Windows的更好操作) SVN客户端:采用Wind ...
最新文章
- Yii2.0 RESTful API 之版本控制
- maven java 配置文件路径_Maven 的配置文件路径读取
- 如何利用PN结来测量温度?
- mysql基于传统的log_file及log_pos主从复制
- 技术负责人的三种角色
- devices-list
- mysql安装中出现的问题,
- Laravel源码学习文章汇总
- selenium使用webdriver新开标签页
- leetcode题解75-颜色分类
- thinkpad 开启虚拟服务器,ThinkPad笔记本怎么开启处理器虚拟化技术
- maya中英文对比_maya菜单中英文对照表
- 计算机科学家王选 题,李星、王永民获2016年王选奖
- python3 时区 时间戳 指定输入时间为东八区时间、北京时间
- AndroidStudio安装apk到vivo手机时提示安装失败
- 踢球骨折在家day20
- 计算机创建只读用户,如何把电脑的文件夹在局域网共享成只读,别人不能删除和修改?...
- spool导出格式的问题
- 随笔——基尔霍夫热辐射定律中灰体发射率和吸收率相等的推导逻辑
- html5导航 按钮,CSS实例:超酷的网站导航按钮
热门文章
- python网络数据爬取及分析从入门到精通pdf_Python网络数据爬取及分析从入门到精通...
- zeppelin集成presto
- 华硕笔记本预装win8改装win7详述
- 计算机基础广域网,计算机网络基础计算机广域网技术.ppt
- c语言 函数 ppt,《C语言函数》PPT课件.ppt
- 小白易懂的回溯算法!!!
- 社会网络(基于python实现)-karate空手道
- 使用Jenkins配置iOS自动化构建工具
- WindowsServers2019摄像头不可用的解决方案
- 方法、操作、算法和多态性术语的不同意义