小明:最近公司需要管理大量的固定资产,比如电脑、打印机这些设备。我想做一个系统来跟踪它们的状态和使用情况。
小李:听起来不错。你可以考虑用Python开发一个简单的固定资产管理系统。不过你有没有想过,如果你们公司有多个代理商,他们也需要访问这些信息呢?
小明:对啊,代理商可能需要查看哪些设备已经分配给他们的客户了。那怎么把这些信息整合到系统中呢?
小李:我们可以设计一个API接口,让代理商能够通过这个接口获取数据。同时,系统也要支持代理商上传设备状态信息。
小明:那具体怎么实现呢?我有点懵。
小李:别急,我们一步一步来。首先,我们需要一个数据库来存储固定资产的信息。然后,用Flask框架创建一个Web服务,提供RESTful API。
小明:那数据库该怎么设计呢?
小李:我们可以用SQLite或者MySQL。表结构大概包括设备ID、名称、型号、位置、状态、所属代理商等字段。
小明:明白了。那代码怎么写呢?
小李:我可以给你一个简单的例子。首先安装Flask和SQLAlchemy:
pip install flask sqlalchemy
然后创建一个基本的模型类:
from flask import Flask
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)
name = db.Column(db.String(100))
model = db.Column(db.String(100))
location = db.Column(db.String(100))
status = db.Column(db.String(50))
agent_id = db.Column(db.Integer, db.ForeignKey('agent.id'))
class Agent(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))

assets = db.relationship('Asset', backref='agent', lazy=True)
if __name__ == '__main__':
db.create_all()
app.run(debug=True)
小明:这看起来挺基础的。那怎么让代理商访问这些数据呢?
小李:我们可以创建一个GET接口,让代理商传入他们的ID,然后返回对应的资产列表。
小明:好的,那代码应该怎么写?
小李:这里是一个简单的例子:
from flask import jsonify
@app.route('/agents/
def get_agent_assets(agent_id):
agent = Agent.query.get_or_404(agent_id)
return jsonify([{
'id': asset.id,
'name': asset.name,
'model': asset.model,
'location': asset.location,
'status': asset.status
} for asset in agent.assets])
小明:这样代理商就可以通过HTTP请求获取数据了。
小李:没错。此外,我们还可以提供POST接口,让代理商上传设备状态更新。
小明:那怎么处理上传的数据呢?
小李:可以定义一个JSON格式的请求体,包含设备ID和新的状态,然后在服务器端更新数据库。
小明:那代码应该是什么样的?
小李:这里是一个示例:
from flask import request
@app.route('/assets/
def update_asset_status(asset_id):
data = request.get_json()
asset = Asset.query.get_or_404(asset_id)
asset.status = data.get('status')
db.session.commit()
return jsonify({'message': 'Status updated successfully'})
小明:这太棒了!这样代理商就能实时更新设备状态了。
小李:是的。但你还得考虑安全性问题,比如验证代理商的身份,防止未授权访问。
小明:那怎么办?可以用JWT吗?
小李:对,可以用Flask-JWT来实现身份验证。代理商登录后会获得一个令牌,后续请求都需要带上这个令牌。
小明:那代码怎么加进去呢?
小李:我们可以先安装flask-jwt:
pip install flask-jwt
然后在代码中添加认证逻辑:
from flask_jwt import JWT, jwt_required
jwt = JWT(app, lambda username, password: Agent.query.filter_by(name=username).first())
@app.route('/login', methods=['POST'])
def login():
data = request.get_json()
user = Agent.query.filter_by(name=data.get('username')).first()
if user and user.password == data.get('password'):
token = jwt.generate_token(user.id)
return jsonify({'token': token})
else:
return jsonify({'error': 'Invalid credentials'}), 401
@app.route('/agents/
@jwt_required()
def get_agent_assets(agent_id):
# ... 原有逻辑 ...
小明:这样就实现了基本的权限控制。
小李:没错。现在系统已经具备了基本功能:资产录入、代理商访问、状态更新和身份验证。
小明:那接下来我是不是还需要考虑前端页面?
小李:如果你想要一个更友好的界面,可以使用React或Vue.js来开发前端,与后端API对接。
小明:听起来不错。那我可以继续扩展这个系统了。
小李:是的。这个系统可以根据实际需求不断优化,比如增加报表功能、设备借用记录、自动提醒等功能。
小明:谢谢你的帮助,我现在对整个系统有了更清晰的认识。
小李:不客气!如果有任何问题,随时问我。
