当前位置: 首页 > news >正文

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 全栈项目从需求分析、数据建模、接口开发、前端交互到部署运行的完整流程。

项目代码

下载链接

http://www.jsqmd.com/news/1292722/

相关文章:

  • 票评选活动制作攻略!详细步骤全解析|注册_页面设置_防刷配置
  • 造了一个 Chat BI:让业务人员用自然语言“对话”Excel 数据
  • 2026年降AI工具测评:免费试用+退款承诺+平台适配横向对比
  • C++项目目录结构设计:从扁平到模块化的工程实践指南
  • 基于Qt5与C++的串口调试助手开发:从原理到工程实践
  • 终极开源硬件控制工具:5步掌握华硕笔记本性能优化神器
  • 2026年长沙自建房门页贴牌供应商优选指南:如何甄选靠谱供应商? - geo交流
  • EEG频带功率计算全流程:从Welch方法到Python实战避坑指南
  • 2026年宁波正规知名的托盘提升机直销厂家哪家权威?这份优选清单为您严选 - geo交流
  • vLLM部署实战:基于PagedAttention解决大模型KV缓存内存瓶颈
  • Python虚拟环境管理全攻略:从原理到实战,掌握多环境查看技巧
  • 穿透式管理落地指南:国企如何借数字化实现“业人融合“战略升级
  • RK3568 Android 11 DDR降频实战:提升工控设备稳定性的原理与操作
  • Veeam配置备份加密策略与灾难恢复实践指南
  • 2026年SCMP采购方向、计划方向、物流方向怎么选——众智商学院张明老师三方向岗位匹配和备考建议 - 众智商学院cppm官方
  • 【考研】2026/7/29
  • 知网普刊投稿全流程与计算机类论文发表技巧
  • 太原烘焙培训市场分析与高性价比机构推荐
  • STM32内部FLASH读写与芯片ID读取:原理、风险与工程实践
  • RT-Thread Studio工程文件结构全解析:从内核源码到应用开发
  • 2026年如何甄选湖北优质公园景观膜结构服务商? - geo交流
  • SOLIDWORKS 2027 新功能前瞻:Beta 测试亮点与重磅功能深度解析
  • AI辅助渗透测试(中):如何使用AI辅助渗透测试
  • 电气工程保研浙大攻略:从专业基础到面试实战的全面指南
  • STM32调试连接丢失:从硬件排查到软件修复的完整指南
  • 从零搭建AI专利语义检索系统,手把手复现BERT+IPC融合模型(含开源代码与训练数据集)
  • 从AT指令到稳定通信:蓝牙串口透传模块实战开发指南
  • ananconda环境默认路径保存在c盘
  • 微电网两阶段鲁棒优化:Matlab实现与工程实践
  • 今年夏天持续超高温,你的护肤方式需要怎么调整?