电力工程档案管理系统:零基础搭建可落地的实操指南
前期准备
需准备的基础软件及依赖,核心操作均在Windows系统下完成(Linux/macOS命令略有差异,逻辑一致):
- Python 3.9(兼容性最佳版本):具体下载地址为https://www.python.org/ftp/python/3.9.13/python-3.9.13-amd64.exe,安装时必须勾选Add Python 3.9 to PATH,否则pip命令无法使用;安装后打开CMD,输入
python --version,显示Python 3.9.13即为成功。 - 依赖包安装:打开CMD执行以下命令,完成后端核心依赖安装: ``` pip install fastapi uvicorn sqlalchemy python-multipart ```
系统核心功能搭建
1. 创建项目结构
新建名为power_archive的文件夹,在文件夹内创建2个空文件:models.py(数据库模型)、app.py(后端接口)。
2. 数据库模型编写(models.py)
将以下完整代码复制到models.py,定义档案存储的核心字段: ``` from sqlalchemy import Column, Integer, String, Text, DateTime from sqlalchemy.ext.declarative import declarative_base from datetime import datetime Base = declarative_base() class ProjectArchive(Base): __tablename__ = "project_archives" id = Column(Integer, primary_key=True, index=True) project_name = Column(String(100), index=True, nullable=False) archive_type = Column(String(50), nullable=False) description = Column(Text) file_path = Column(String(200), nullable=False) create_time = Column(DateTime, default=datetime.utcnow) update_time = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) ```
3. 后端接口编写(app.py)
将以下完整代码复制到app.py,实现档案上传、查询两大核心功能: ``` from fastapi import FastAPI, File, UploadFile, Form, Depends, HTTPException from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, Session from models import Base, ProjectArchive import os from datetime import datetime 系统基础配置 app = FastAPI(title="电力工程档案管理系统") DATABASE_URL = "sqlite:///./power_archives.db" UPLOAD_DIR = "./archives" 初始化数据库 engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False}) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base.metadata.create_all(bind=engine) 创建档案存储目录 os.makedirs(UPLOAD_DIR, exist_ok=True) 数据库依赖:获取会话 def get_db(): db = SessionLocal() try: yield db finally: db.close() 核心接口1:上传电力工程档案 @app.post("/upload-archive/", summary="上传电力工程档案") async def upload_archive( project_name: str = Form(...), archive_type: str = Form(...), description: str = Form(""), file: UploadFile = File(...), db: Session = Depends(get_db) ): 生成唯一文件名(避免重名) file_ext = os.path.splitext(file.filename)[1] file_name = f"{datetime.utcnow().strftime('%Y%m%d%H%M%S')}{file_ext}" file_full_path = os.path.join(UPLOAD_DIR, file_name) 保存文件到本地 with open(file_full_path, "wb") as f: content = await file.read() f.write(content) 档案信息存入数据库 new_archive = ProjectArchive( project_name=project_name, archive_type=archive_type, description=description, file_path=file_full_path ) db.add(new_archive) db.commit() db.refresh(new_archive) return {"code": 200, "msg": "上传成功", "data": {"档案ID": new_archive.id, "原文件名": file.filename}} 核心接口2:按工程查询档案 @app.get("/archives/", summary="查询电力工程档案") async def get_archives(project_name: str, db: Session = Depends(get_db)): archives = db.query(ProjectArchive).filter(ProjectArchive.project_name == project_name).all() return {"code": 200, "msg": "查询成功", "data": archives} ```
系统启动与实操验证
1. 启动系统

在CMD中切换到power_archive文件夹,执行以下命令启动服务:
```
uvicorn app:app --reload --host 0.0.0.0 --port 8000
```
启动成功后,CMD会显示“Uvicorn running on http://0.0.0.0:8000”的提示。
2. 上传档案测试
打开浏览器输入http://localhost:8000/docs,进入FastAPI自动生成的调试页面:
- 找到POST /upload-archive/,点击“Try it out”;
- 填写参数:project_name填“XX小区10kV配电工程”,archive_type填“施工图纸”,description填“高压柜布置图”,file选择本地任意文件;
- 点击“Execute”,返回code:200即为上传成功,文件自动保存到power_archive/archives文件夹。
3. 查询档案测试
在同一调试页面找到GET /archives/,点击“Try it out”;
- 填写参数project_name为“XX小区10kV配电工程”,点击“Execute”;
- 返回的data中会显示刚才上传的档案信息,验证系统正常运行。
可选扩展操作
1. 细化档案分类
如需增加细分类型(如“变电设备”“输电线路”),可在models.py的ProjectArchive类中添加:
```
category = Column(String(50), nullable=False, default="通用")
```
同时修改app.py的upload_archive接口,新增参数category: str = Form("通用"),重新运行服务即可生效。
2. 基础权限控制(可选)
如需添加登录验证,简化版代码如下(生产环境需加密密码): ``` from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") 登录接口 @app.post("/token") async def login(form_data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db)): 演示账号:admin,密码:123456 if form_data.username == "admin" and form_data.password == "123456": return {"access_token": "admin_token", "token_type": "bearer"} raise HTTPException(status_code=400, detail="用户名或密码错误") 上传接口添加登录依赖,仅登录用户可上传 @app.post("/upload-archive/", dependencies=[Depends(oauth2_scheme)], summary="上传电力工程档案") ```