当前位置: 首页 > 新闻资讯 > 资产管理系统

基于Python的固定资产管理系统在大学中的应用与实现

本文通过对话形式探讨了如何利用Python开发一个适合大学使用的固定资产管理系统,涵盖系统设计、功能实现及实际应用场景。

小李:老王,我最近在研究一个项目,是关于大学资产管理的。你对这个有了解吗?

老王:哦,你说的是固定资产管理系统吧?我们学校去年刚上线了一个类似的系统,挺不错的。不过具体怎么实现的,我还真不太清楚。

小李:那正好,我打算用Python做一个简易版的,用来模拟大学的资产管理系统。你觉得可行吗?

老王:当然可以!Python语言简洁,而且有很多库支持,比如Django或者Flask,都可以用来做Web系统。不过你得先想清楚系统需要哪些功能。

小李:对,我初步规划了一下,系统应该包括资产登记、查询、借出、归还、盘点等功能。同时还要有用户权限管理,比如管理员和普通教师的不同权限。

老王:听起来不错。那你打算用什么数据库来存储数据呢?

小李:我想用SQLite,因为它轻量,不需要复杂的配置,适合小型项目。不过如果以后扩展的话,可能需要用MySQL或者PostgreSQL。

老王:没错,SQLite确实很适合起步阶段。那代码方面呢?有没有具体的结构?

小李:我打算用Flask框架搭建后端,前端用HTML、CSS和JavaScript,再加上一些简单的jQuery来处理交互。这样整个系统就比较完整了。

老王:很好。那我可以帮你看看代码结构是否合理。你有没有写过类似系统的代码?

小李:还没有,我准备先从基础开始,比如定义数据库模型,然后逐步添加功能。

老王:那我们可以一步步来。首先,我们需要创建一个资产表,包含资产编号、名称、类别、购买日期、状态等字段。

小李:对,那我先用SQLAlchemy来定义模型。

老王:好的,那你可以这样写代码:


from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///assets.db'
db = SQLAlchemy(app)

class Asset(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    asset_id = db.Column(db.String(50), unique=True, nullable=False)
    name = db.Column(db.String(100), nullable=False)
    category = db.Column(db.String(50), nullable=False)
    purchase_date = db.Column(db.Date, nullable=False)
    status = db.Column(db.String(20), default='Available')

@app.route('/')
def index():
    assets = Asset.query.all()
    return render_template('index.html', assets=assets)

@app.route('/add', methods=['POST'])
def add_asset():
    asset_id = request.form['asset_id']
    name = request.form['name']
    category = request.form['category']
    purchase_date = request.form['purchase_date']
    new_asset = Asset(asset_id=asset_id, name=name, category=category, purchase_date=purchase_date)
    db.session.add(new_asset)
    db.session.commit()
    return redirect(url_for('index'))

if __name__ == '__main__':
    with app.app_context():
        db.create_all()
    app.run(debug=True)
    

小李:这段代码看起来没问题。不过还需要考虑用户权限,比如只有管理员才能添加或修改资产信息。

老王:是的,这时候可以用Flask-Login来管理用户登录状态。你可以定义一个User模型,然后根据角色判断是否有权限操作。

小李:明白了。那我接下来应该怎么做?

老王:你可以继续添加登录功能,然后为不同用户分配不同的权限。比如管理员可以进行增删改查,而普通用户只能查看。

小李:那我可以先实现一个简单的登录界面,然后在视图中检查用户是否为管理员。

老王:对,你可以使用Flask-Login来简化这部分逻辑。例如,定义一个User类,并继承UserMixin。

小李:那我可以这样写代码:


from flask_login import LoginManager, UserMixin, login_required, login_user, logout_user

login_manager = LoginManager()
login_manager.init_app(app)

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(120), nullable=False)
    is_admin = db.Column(db.Boolean, default=False)

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        user = User.query.filter_by(username=username).first()
        if user and user.password == password:
            login_user(user)
            return redirect(url_for('index'))
    return render_template('login.html')

@app.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(url_for('index'))
    

小李:这样就可以控制用户的访问权限了。那接下来我是不是该考虑资产的借出和归还功能?

老王:对,这部分可以通过在Asset模型中增加一个借用人字段,以及借出和归还的时间记录。

小李:那我可以这样修改模型:


class Asset(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    asset_id = db.Column(db.String(50), unique=True, nullable=False)
    name = db.Column(db.String(100), nullable=False)
    category = db.Column(db.String(50), nullable=False)
    purchase_date = db.Column(db.Date, nullable=False)
    status = db.Column(db.String(20), default='Available')
    borrower = db.Column(db.String(100))
    borrow_date = db.Column(db.Date)
    return_date = db.Column(db.Date)
    

老王:这样就能记录借出和归还的信息了。然后你可以在前端页面中添加相应的按钮,比如“借出”和“归还”,并绑定到对应的路由。

小李:对,那我可以写一个借出的路由,比如:


@app.route('/borrow/')
@login_required
def borrow(id):
    asset = Asset.query.get_or_404(id)
    if asset.status == 'Available':
        asset.status = 'Borrowed'
        asset.borrower = current_user.username
        asset.borrow_date = datetime.date.today()
        db.session.commit()
    return redirect(url_for('index'))
    

老王:很好。那归还的逻辑也类似,只是要更新状态和归还时间。

小李:是的,那我可以这样写归还的路由:


@app.route('/return/')
@login_required
def return_asset(id):
    asset = Asset.query.get_or_404(id)
    if asset.status == 'Borrowed':
        asset.status = 'Available'
        asset.return_date = datetime.date.today()
        db.session.commit()
    return redirect(url_for('index'))
    

固定资产管理系统

老王:这样一来,整个系统的基本功能就完成了。接下来你可以考虑添加更多功能,比如搜索、导出Excel、定时盘点等。

小李:对,尤其是导出Excel,可以用pandas库来实现。另外,还可以加入一个盘点页面,让用户手动确认资产状态。

老王:这些功能都很实用。如果你有兴趣,还可以把系统部署到服务器上,比如使用Heroku或者阿里云。

小李:好的,我会继续完善这个项目。感谢你的帮助,老王!

固定资产管理系统

老王:不客气,随时欢迎你来找我讨论。希望你的项目能顺利上线,为学校的资产管理提供帮助。

本站部分内容及素材来源于互联网,如有侵权,联系必删!

相关资讯

    暂无相关的数据...