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

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

一、项目简介

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

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

适用场景:

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

二、技术栈

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

三、系统架构

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

text 复制代码
浏览器 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

字段 类型 说明
id Integer 主键
username String 用户名,唯一
email String 邮箱,唯一
hashed_password String bcrypt 哈希密码
full_name String 姓名
department String 部门
is_active Boolean 是否启用
created_at DateTime 创建时间

文档表 documents

字段 类型 说明
id Integer 主键
title String 文档标题
category String 分类
content Text 内容
status String 状态
owner_id Integer 所属用户
created_at/updated_at DateTime 创建/更新时间

任务表 tasks

字段 类型 说明
id Integer 主键
title String 任务标题
description Text 说明
priority String 优先级
status String 状态
due_date String 截止日期
owner_id Integer 所属用户

审批表 approvals

字段 类型 说明
id Integer 主键
title String 审批标题
approval_type String 审批类型
reason Text 申请原因
status String pending/approved/rejected
comment Text 审批意见
applicant_id Integer 申请人

六、后端接口设计

方法 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 中,适合教学示例快速理解。页面结构如下:

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

前端状态处理:

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

八、核心代码讲解

1. 数据库连接

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

python 复制代码
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 通过依赖注入获取数据库会话:

python 复制代码
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

2. 密码哈希与 JWT

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

python 复制代码
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

def get_password_hash(password: str) -> str:
    return pwd_context.hash(password)

def verify_password(plain_password: str, hashed_password: str) -> bool:
    return pwd_context.verify(plain_password, hashed_password)

登录成功后生成 JWT:

python 复制代码
def create_access_token(data: dict, expires_delta: Optional[timedelta] = None) -> str:
    to_encode = data.copy()
    expire = datetime.utcnow() + (expires_delta or timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES))
    to_encode.update({"exp": expire})
    return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)

3. 受保护接口

例如创建任务接口:

python 复制代码
@app.post("/api/tasks", response_model=schemas.TaskRead)
def create_task(
    task: schemas.TaskCreate,
    db: Session = Depends(get_db),
    current_user: models.User = Depends(auth.get_current_user)
):
    return crud.create_task(db, current_user.id, task)

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

4. 前端 API 封装

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

javascript 复制代码
if (token) headers.Authorization = `Bearer ${token}`
const response = await fetch(`${API_BASE}${path}`, { ...options, headers })

登录后保存 token:

javascript 复制代码
export function setToken(value) {
  token = value || ''
  if (token) localStorage.setItem('office_token', token)
  else localStorage.removeItem('office_token')
}

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

九、部署与运行步骤

1. 后端运行

bash 复制代码
cd project/backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

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

可访问接口文档:

text 复制代码
http://localhost:8000/docs

2. 前端运行

bash 复制代码
cd project/frontend
npm install
npm run dev

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

3. 使用流程

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

十、项目目录

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

项目代码

下载链接

相关推荐
颜酱2 小时前
09 | 重构项目结构
人工智能·python·langchain
cm04Z9c912 小时前
C#摸鱼实录——IoC与DI案例详解
开发语言·c#
long3162 小时前
Java 新手入门与实战开发指南
java·开发语言
摩西蒙3 小时前
计算机网络
开发语言·计算机网络·php
山峰哥3 小时前
数据库性能救星:Explain执行计划深度拆解
服务器·开发语言·数据库·sql·启发式算法
Sisphusssss4 小时前
香橙派5plus GPIO
linux·python·ubuntu
颜酱4 小时前
08 | 把维度值同步到 Elasticsearch(生成阶段)
人工智能·python·langchain
久久学姐4 小时前
基础转码学 AI:Java+Python 双语言入门,3 个月可落地实战项目
java·python·ai·转码·实战项目
花生了什么事o4 小时前
synchronized 与 ReentrantLock:Java 锁机制原理与实现对比
java·开发语言