Python全栈项目--智能办公自动化系统

📅 2026/7/30 8:50:19 👁️ 阅读次数 📝 编程学习
Python全栈项目--智能办公自动化系统

Python全栈项目–智能办公自动化系统

一、项目简介

智能办公自动化系统是一个面向企业、学校或团队内部的轻量级 OA 平台。它把日常办公中最常见的文档沉淀、任务协同、审批流转和统计看板整合在一个 Web 系统中,用户完成注册登录后即可管理自己的办公数据。

本项目不是单纯演示某个算法或概念,而是一个可运行的 Python 全栈项目:后端提供 RESTful API、SQLite 数据持久化、密码哈希和 JWT 鉴权;前端使用 Vue 3 + Vite 构建单页应用,完成登录态保存、鉴权请求、业务表单和列表展示。

适用场景:

  • 企业内部 OA 原型
  • 课程设计/毕业设计全栈项目
  • FastAPI + Vue 3 前后端分离实战
  • 办公自动化业务建模参考

二、技术栈

层级技术说明
后端框架FastAPI构建高性能 REST API,自动生成接口文档
数据库SQLite单文件数据库,适合教学、原型和本地部署
ORMSQLAlchemy定义用户、文档、任务、审批等数据模型
数据校验Pydantic请求参数和响应结构校验
鉴权passlib + python-josebcrypt 密码哈希、JWT 登录 token
前端Vue 3 + Vite组件化单页应用、快速开发调试
接口通信Fetch API 封装统一处理 token、请求和异常

三、系统架构

系统采用经典前后端分离架构:

浏览器 Vue 3 前端 ├─ 登录/注册页面 ├─ 文档中心 ├─ 任务协同 ├─ 审批流程 └─ 办公看板 │ Authorization: Bearer <JWT> ▼ FastAPI 后端服务 ├─ auth.py:密码哈希与 JWT 鉴权 ├─ main.py:接口路由 ├─ crud.py:业务操作 ├─ schemas.py:请求响应模型 └─ models.py:SQLAlchemy ORM 模型 │ ▼ SQLite 数据库 office_automation.db

架构特点:

  1. 注册和登录接口开放访问;核心业务接口全部通过 JWT 保护。
  2. 前端登录后把 token 保存到 localStorage,请求时统一追加Authorization请求头。
  3. SQLite 自动建表,降低部署门槛。
  4. 文档、任务、审批都绑定当前登录用户,避免越权访问。

四、功能模块

1. 用户认证模块

  • 用户注册:用户名、邮箱、密码、姓名、部门
  • 密码哈希:后端不保存明文密码
  • 用户登录:校验账号密码并签发 JWT
  • 当前用户:根据 token 获取用户信息
  • 退出登录:前端清理本地 token

2. 文档中心

  • 新增文档:标题、分类、内容、状态
  • 文档查询:支持按标题关键字检索
  • 适用办公通知、制度、会议纪要等场景

3. 任务协同

  • 创建任务:标题、说明、优先级、截止日期
  • 任务列表:按当前用户隔离
  • 任务更新:可将任务标记为完成
  • 看板统计:统计任务数量和完成数量

4. 审批流程

  • 提交审批:请假、报销、采购、通用审批
  • 审批列表:查看个人审批单
  • 审批决策:模拟通过或驳回流程
  • 看板统计:展示待处理审批数量

5. 办公看板

  • 文档总数
  • 任务总数
  • 待处理审批数
  • 已完成任务数

五、数据库/数据模型设计

项目使用 SQLite,核心表包括usersdocumentstasksapprovals

用户表 users

字段类型说明
idInteger主键
usernameString用户名,唯一
emailString邮箱,唯一
hashed_passwordStringbcrypt 哈希密码
full_nameString姓名
departmentString部门
is_activeBoolean是否启用
created_atDateTime创建时间

文档表 documents

字段类型说明
idInteger主键
titleString文档标题
categoryString分类
contentText内容
statusString状态
owner_idInteger所属用户
created_at/updated_atDateTime创建/更新时间

任务表 tasks

字段类型说明
idInteger主键
titleString任务标题
descriptionText说明
priorityString优先级
statusString状态
due_dateString截止日期
owner_idInteger所属用户

审批表 approvals

字段类型说明
idInteger主键
titleString审批标题
approval_typeString审批类型
reasonText申请原因
statusStringpending/approved/rejected
commentText审批意见
applicant_idInteger申请人

六、后端接口设计

方法URL功能是否需要登录
GET/api/health健康检查
POST/api/auth/register注册
POST/api/auth/login登录
GET/api/users/me当前用户
GET/api/dashboard看板统计
POST/api/documents创建文档
GET/api/documents?keyword=文档列表/搜索
POST/api/tasks创建任务
GET/api/tasks?status_filter=任务列表
PATCH/api/tasks/{task_id}更新任务
POST/api/approvals提交审批
GET/api/approvals审批列表
PATCH/api/approvals/{id}/decision审批决策

接口设计遵循三个原则:

  1. 认证接口独立放在/api/auth下;
  2. 业务资源使用复数名词,如documentstasks
  3. 业务接口通过Depends(auth.get_current_user)获取当前用户。

七、前端页面设计

前端使用 Vue 3 + Vite,核心页面集中在App.vue中,适合教学示例快速理解。页面结构如下:

App.vue ├─ 顶部 Hero 区域:系统名称、当前用户、退出按钮 ├─ 登录/注册卡片:未登录时显示 ├─ 数据看板:登录后显示 └─ 业务标签页 ├─ 文档中心 ├─ 任务协同 └─ 审批流程

前端状态处理:

  • user保存当前登录用户;
  • stats保存看板统计;
  • docs/tasks/approvals保存业务列表;
  • api.js统一管理后端地址、token 读写和请求错误处理。

八、核心代码讲解

1. 数据库连接

backend/app/database.py负责创建 SQLite 引擎和 Session:

DATABASE_URL="sqlite:///./office_automation.db"engine=create_engine(DATABASE_URL,connect_args={"check_same_thread":False})SessionLocal=sessionmaker(autocommit=False,autoflush=False,bind=engine)Base=declarative_base()

FastAPI 通过依赖注入获取数据库会话:

defget_db():db=SessionLocal()try:yielddbfinally:db.close()

2. 密码哈希与 JWT

auth.py中使用 bcrypt 对密码进行哈希:

pwd_context=CryptContext(schemes=["bcrypt"],deprecated="auto")defget_password_hash(password:str)->str:returnpwd_context.hash(password)defverify_password(plain_password:str,hashed_password:str)->bool:returnpwd_context.verify(plain_password,hashed_password)

登录成功后生成 JWT:

defcreate_access_token(data:dict,expires_delta:Optional[timedelta]=None)->str:to_encode=data.copy()expire=datetime.utcnow()+(expires_deltaortimedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES))to_encode.update({"exp":expire})returnjwt.encode(to_encode,SECRET_KEY,algorithm=ALGORITHM)

3. 受保护接口

例如创建任务接口:

@app.post("/api/tasks",response_model=schemas.TaskRead)defcreate_task(task:schemas.TaskCreate,db:Session=Depends(get_db),current_user:models.User=Depends(auth.get_current_user)):returncrud.create_task(db,current_user.id,task)

只有请求头携带合法 token 时,current_user才能解析成功。

4. 前端 API 封装

frontend/src/api.js统一追加 token:

if(token)headers.Authorization=`Bearer${token}`constresponse=awaitfetch(`${API_BASE}${path}`,{...options,headers})

登录后保存 token:

exportfunctionsetToken(value){token=value||''if(token)localStorage.setItem('office_token',token)elselocalStorage.removeItem('office_token')}

这样 Vue 组件不需要重复处理认证细节。

九、部署与运行步骤

1. 后端运行

cdproject/backend python3-mvenv .venvsource.venv/bin/activate pipinstall-rrequirements.txt uvicorn app.main:app--reload--host0.0.0.0--port8000

后端默认地址:http://localhost:8000

可访问接口文档:

http://localhost:8000/docs

2. 前端运行

cdproject/frontendnpminstallnpmrun dev

默认访问:http://localhost:5173

3. 使用流程

  1. 打开前端页面;
  2. 注册一个账号,例如admin / admin123
  3. 登录进入系统;
  4. 新增文档、任务和审批单;
  5. 查看顶部数据看板变化;
  6. 点击退出登录,验证鉴权状态处理。

十、项目目录

project/ README.md backend/ requirements.txt app/ __init__.py main.py database.py models.py schemas.py crud.py auth.py frontend/ package.json index.html src/ main.js App.vue api.js style.css

十一、项目总结

本项目完整覆盖了全栈开发的关键环节:

  • 后端:FastAPI 路由、SQLite 持久化、SQLAlchemy ORM、Pydantic 数据校验;
  • 安全:密码哈希、JWT 签发、受保护接口、用户数据隔离;
  • 前端:Vue 3 单页应用、登录态维护、鉴权请求、业务表单和列表渲染;
  • 工程化:前后端目录拆分、README 运行说明、可打包发布。

后续可以继续扩展:

  1. 增加角色权限,例如普通员工、部门主管、管理员;
  2. 引入审批流节点,让审批从“模拟决策”升级为真实多人流转;
  3. 增加文件上传,将文档附件保存到对象存储;
  4. 接入消息通知,任务和审批变更时推送提醒;
  5. 使用 PostgreSQL/MySQL 替换 SQLite,用于生产部署。

通过这个项目,可以比较系统地掌握 Python 全栈项目从需求分析、数据建模、接口开发、前端交互到部署运行的完整流程。

项目代码

下载链接