文章目录

  • 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 服务器信息查看应用)相关推荐

  1. 项目部署到Linux服务器上 (全)linux服务器安装java mysql 配置

    项目部署到Linux服务器上 (全) 1.服务器准备 首先你需要购买一台云服务器 我是领取的阿里云的服务器 选择linux系统 设置好 服务器的密码 忘记可以在 控制台首页 云服务器ECS 里面找到购 ...

  2. springboot项目部署到Linux服务器

    按照yum方式安装jdk成功 Linux系统下安装jdk及环境配置(两种方法)_橙子君的博客-CSDN博客_linux配置jdk这里介绍两种linux环境下jdk的安装以及环境配置方法在windows ...

  3. 开发笔记--项目部署到linux服务器

    安卓app后端项目部署到linux服务器,通过创建screen窗体,管理linux会话不会随着shell连接窗口的关闭而被杀掉进程.本文章为个人笔记,欢迎各位大牛给予宝贵意见和建议. Xshell远程 ...

  4. 基于Django框架的sysinfo项目搭建---系统信息监控(主机名,内核版本等)

    目录 主机信息监控 项目搭建 基础框架构建 首页系统信息展示完善 主机信息监控 项目搭建 详情见前篇博客 创建子应用host并且设置本地化 数据库表的创建和超级用户的创建 git管理项目(requir ...

  5. 免费搭建虚拟机Linux服务器,附带部署项目和内网穿透教程(亲测有效)cd

    最近在学习Linux服务器上进行项目部署,大家都知道在云服务器上可以部署项目,这可以使得在任何地方都可以访问到项目.但购买服务器是要收费的,这使得我十分香菇....但是还有办法的,在VMware虚拟机 ...

  6. filezilla 设置服务器_java项目部署到linux服务器,微信小程序后台springboot项目部署到腾讯云服务器(图文详解)...

    前面给大家讲了一个点餐系统的开发,包括java点餐后台和微信点餐小程序.可是都是教大家如何在本地把项目跑起来.今天就来教大家如何把这个点餐系统部署到服务器,实现商用. 传送门 点餐系统的开发,java ...

  7. springboot 获取登录浏览器_java项目部署到linux服务器,微信小程序后台springboot项目部署到云服务器(图文详解)...

    前面给大家讲了一个点餐系统的开发,包括java点餐后台和微信点餐小程序.可是都是教大家如何在本地把项目跑起来.今天就来教大家如何把这个点餐系统部署到服务器,实现商用. 传送门 点餐系统的开发,java ...

  8. 利用vmware在自己的个人电脑上面搭建虚拟linux服务器

    学习linux的第一步当然是搭建一个linux环境了 搭建linux环境有两种选择:第一种不差钱的,直接弄一台物理机,这个的话基本不在本次介绍范围内. 第二种就是搭建虚拟机,利用自己个人电脑虚拟出一个 ...

  9. 搭建 SVN Linux服务器

    前: 需求: 应美术项目组要求,搭建一台SVN版本控制服务器,以供后续版本的保存 环境: SVN服务器:采用Linux端(较为稳定,当然也可以选择Windows的更好操作) SVN客户端:采用Wind ...

最新文章

  1. Yii2.0 RESTful API 之版本控制
  2. maven java 配置文件路径_Maven 的配置文件路径读取
  3. 如何利用PN结来测量温度?
  4. mysql基于传统的log_file及log_pos主从复制
  5. 技术负责人的三种角色
  6. devices-list
  7. mysql安装中出现的问题,
  8. Laravel源码学习文章汇总
  9. selenium使用webdriver新开标签页
  10. leetcode题解75-颜色分类
  11. thinkpad 开启虚拟服务器,ThinkPad笔记本怎么开启处理器虚拟化技术
  12. maya中英文对比_maya菜单中英文对照表
  13. 计算机科学家王选 题,李星、王永民获2016年王选奖
  14. python3 时区 时间戳 指定输入时间为东八区时间、北京时间
  15. AndroidStudio安装apk到vivo手机时提示安装失败
  16. 踢球骨折在家day20
  17. 计算机创建只读用户,如何把电脑的文件夹在局域网共享成只读,别人不能删除和修改?...
  18. spool导出格式的问题
  19. 随笔——基尔霍夫热辐射定律中灰体发射率和吸收率相等的推导逻辑
  20. html5导航 按钮,CSS实例:超酷的网站导航按钮

热门文章

  1. python网络数据爬取及分析从入门到精通pdf_Python网络数据爬取及分析从入门到精通...
  2. zeppelin集成presto
  3. 华硕笔记本预装win8改装win7详述
  4. 计算机基础广域网,计算机网络基础计算机广域网技术.ppt
  5. c语言 函数 ppt,《C语言函数》PPT课件.ppt
  6. 小白易懂的回溯算法!!!
  7. 社会网络(基于python实现)-karate空手道
  8. 使用Jenkins配置iOS自动化构建工具
  9. WindowsServers2019摄像头不可用的解决方案
  10. 方法、操作、算法和多态性术语的不同意义