基于Python的IT设备管理系统

基于Python的IT设备管理系统

近年来,越来越多的企事业单位把业务迁移到Web上完成,随之而来的是数据量的爆炸式增长。数据信息的繁杂,必然要求一个有序的管理系统,而数据库则是管理大量信息最有效的方式,用户通过WEB向服务端程序递交查询请求,服务端程序在数据库中检索,将结果生成的页面展现在用户面前,直观而有效。如何让系统提供安全、稳定、高效的服务,无疑是Web应用系统开发人员必须再三思考的问题,因为这关系到用户的体验,进而关系到系统的成败。

本文以基于Python的IT设备管理系统为例,使用Flask框架,结合MySQL数据库,针对管理系统登录功能、查询功能、信息分页显示功能等,展开研究,进而采用合理的技术,以达到对IT设备查询,增加,修改和删除的目的。

在这里插入图片描述

RBAC(Role Based Access Control,基于角色的访问控制)通过建立“权限<->角色”的关联实现将权限赋予给角色,并通过建立“角色<->用户”的关联实现为用户指定角色,从而使用户获得相应角色所具有的权限。RBAC的基本思想就是给用户指定角色,这些角色中定义了允许用户操作哪些系统功能以及资源对象。

由于权限与用户的分离,RBAC具有以下优势:

· 管理员不需要针对用户去逐一指定权限,只需要预先定义具有相应权限的角色,再将角色赋予用户即可。因此RBAC更能适应用户的变化,提高了用户权限分配的灵活性。

· 由于角色与用户的关系常常会发生变化,但是角色和权限的关系相对稳定,因此利用这种稳定的关联可减小用户授权管理的复杂性,降低管理开销。

系统流程:用户注册,分配默认角色(注册用户),登录,按类别查询,按部门查询,按存放位置查询,模糊查询,修改用户信息,修改密码,忘记密码(系统发送邮件到用户邮箱),修改用户角色(需要管理员审核)为管理员,管理员对数据增加,修改,删除。

初始数据:数据库角色表添加用户和管理员两个角色,类别表添加各个类别,部门表添加各个部门,位置表添加各个存放位置。

目录结构:

在这里插入图片描述

在这里插入图片描述

MySQL数据库

信息管理是一项复杂、系统的工作,需要加强对各种信息管理技术的应用,而计算机数据库技术在信息管理方面发挥着重要的作用。数据库技术适于对大量的数据进行组织管理,Web技术拥有较好的信息发布途径,这两种技术天然的互补性,决定其相互融合成为技术发展的必然趋势。将Web技术与数据库技术相结合,开发动态的Web数据库应用,已成为当今Web技术研究的热点所在。MySQL数据库功能强大、处理速度快、占用资源小、跨平台、安全性好、运行稳定可靠,已被全世界范围各领域用户广泛应用,另外支持它的资源极其丰富如各种库、可视管理工具等。

数据库表

数据库设计是系统开发中非常重要的一个环节,之所以强调数据库的重要性,是因为数据库设计就像在建设高楼大厦的根基一样,如果设计不好,在后来的系统维护、变更和功能扩充时,将会引起比较大的问题,大量工作将会重新进行。通过分析系统功能,再结合IT办公设备,可以建立以下几个表。

办公设备表:设备名称,规格型号,主要参数,IP地址,使用人,所属类别,所属部门,存放位置,设备编号,设备状态,购买日期,购买成本

部门表:部门名称,部门负责人

类别表:类别名称

位置表:位置名称

用户表:用户名,密码,邮箱

角色表:角色名

数据库E-R图

根据数据库表中的实体和它们之间的关系,可以画出E-R图。

设备:

在这里插入图片描述

用户:

在这里插入图片描述

数据库模型类

如果使用原生SQL的方式来操作数据库,随着项目代码量的提升会发现有大量操作数据库的冗余代码,以及大量SQL语句与逻辑代码杂糅在一起不利于核心代码的读写,并且SQL语句的利用率不高。当更换数据库产品时有些特定SQL语句需要重写,而使用ORM框架能很好的避免上述问题。ORM(Object Relational Mapping),叫作对象关系映射,它把一个类映射成数据库里的一张表,而属性映射成数据库表的列,每一个实例对象对应数据库表里的一行数据。通过它我们可以直接使用面向对象的方式来编写程序,而不再直接书写原生的SQL语句,而且大部分ORM框架支持多种数据库,只需很少的配置即可完成数据库产品的更换。

在Python中,最有名的ORM框架是SQLAlchemy。 而在Flask框架中可以使用Flask-SQLAlchemyFlask-SQLAlchemy是为了简化SQLAlchemy进行的封装。

设备模型类:

# office/models.py
from ..exts import db

# 部门和办公设备的关系 一个部门可以使用多个办公设备 一个办公设备只能被一个部门使用 一对多的关系
class Department(db.Model):
    __tablename__ = "department"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(20), nullable=False, index=True, unique=True)
    leader = db.Column(db.String(10), nullable=False, index=True)

    def __init__(self, name, leader):
        self.name = name
        self.leader = leader

    def __repr__(self):
        return "<Department(name:%s,leader:%s)>" % (self.name, self.leader)


# 类别和办公设备的关系 一个类别可以有多个办公设备 一个办公设备只能属于一个类别 一对多的关系
class Category(db.Model):
    __tablename__ = "category"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(20), nullable=False, index=True, unique=True)

    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return "<Category(name:%s)>" % (self.name)


# 存放位置和办公设备的关系 一对多的关系
class Location(db.Model):
    __tablename__ = "location"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(20), nullable=False, index=True, unique=True)

    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return "<Location(name:%s)>" % (self.name)


class Equipment(db.Model):
    __tablename__ = "equipment"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(10), nullable=False, index=True)
    model = db.Column(db.String(20))
    parameter = db.Column(db.String(30))
    user = db.Column(db.String(30))
    IPaddress = db.Column(db.String(20))
    asset_number = db.Column(db.String(20), nullable=False, unique=True)
    asset_status = db.Column(db.Enum("在用", "闲置", "报废", "转移"), nullable=False)
    purchase_date = db.Column(db.Date)
    purchase_cost = db.Column(db.Float)
    department_id = db.Column(db.Integer, db.ForeignKey(
        'department.id'), nullable=False)
    category_id = db.Column(db.Integer, db.ForeignKey(
        'category.id'), nullable=False)
    location_id = db.Column(db.Integer, db.ForeignKey(
        'location.id'), nullable=False)

    department = db.relationship("Department", backref="equipments")
    category = db.relationship("Category", backref="equipments")
    location = db.relationship("Location", backref="equipments")

    def __init__(self, name, asset_number, asset_status, department_id, category_id, location_id):
        self.name = name
        self.asset_number = asset_number
        self.asset_status = asset_status
        self.department_id = department_id
        self.category_id = category_id
        self.location_id = location_id

    def __repr__(self):
        return "<Equipment(name:%s,asset_number:%s,asset_status:%s)>" % (self.name, self.asset_number, self.asset_status)

用户模型类:

# user/models.py
from ..exts import db
from flask_login import UserMixin
# mysql 日期设置默认值必须使用timestamp类型
from sqlalchemy.sql.sqltypes import TIMESTAMP
from sqlalchemy.sql import func


class User(db.Model, UserMixin):
    __tablename__ = "user"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(18), nullable=False, unique=True)
    password = db.Column(db.String(64), nullable=False)
    email = db.Column(db.String(60), nullable=False)
    create_time = db.Column(
        TIMESTAMP, server_default=func.now(), nullable=False)
    role_id = db.Column(db.Integer, db.ForeignKey(
        'role.id'), nullable=False, default=1)

    role = db.relationship("Role", backref="users")

    def __init__(self, username, password, email):
        self.username = username
        self.password = password
        self.email = email

    def __repr__(self):
        return "<User(username: %s,email:%s,role:%s)>" % (self.username, self.email,<
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

崇赛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值