一、项目概述与环境搭建
大家好,我是老张。做客服工单系统这个选题,其实是我自己踩过坑后的决定。
几年前我带团队给一家电商公司做售后系统,当时选了个特别重的框架,结果光环境配置就折腾了两周。后来我反思——对于教学来说,轻量、实用、能快速看到效果才是王道。所以这次我选了 Flask + SQLite + Bootstrap 这套组合拳。
1.1 工单系统业务场景分析
先聊聊工单系统到底是个啥。说白了,它就是客服和客户之间的「任务流转器」。
你想想看,一个客户打电话进来投诉,客服接单、记录问题、转给技术、技术处理完再回传——这中间如果没有系统管理,全靠微信聊天记录,那不乱套才怪。
我见过最夸张的情况:某公司客服用 Excel 表格记工单,结果同事误删了一行数据,整个月的售后记录全没了。嗯,从那以后他们老板铁了心要上系统。
工单系统的核心业务场景其实就这几个:
- 客户提交工单:描述问题、上传截图、选择紧急程度
- 客服受理与分派:接单、判断类型、指派给对应技术员
- 技术处理与反馈:查看详情、填写处理结果、更新状态
- 客户确认与评价:确认问题是否解决、给客服打分
- 管理员监控与统计:查看所有工单、生成报表、分析效率
重点提醒:我们这套课程会做一个完整的闭环系统,从客户提交到最终评价,每一步都走通。不是那种「只做一半」的 demo。
1.2 技术选型:为什么是 Flask + SQLite + Bootstrap?
很多新手会问:为什么不直接用 Django?或者用 Vue + Spring Boot?
我的回答很简单——学习曲线要平,上手要快。
我个人习惯是:教新手用最轻的武器。Flask 的代码量少,路由清晰,适合理解 Web 框架的本质。SQLite 不需要安装数据库服务,一个文件搞定,适合做原型和小型项目。Bootstrap 嘛,你想想看,不用写 CSS 就能出个能看的界面,多省心。
我在项目中遇到过好几次这样的情况:团队用 Flask 快速搭了个原型给客户演示,客户当场拍板,后面才换成生产级方案。所以别小看这套组合,它真的能帮你快速验证想法。
| 技术 | 选型理由 | 适用场景 |
|---|---|---|
| Flask | 轻量、灵活、学习成本低 | 中小型 Web 应用、API 服务 |
| SQLite | 零配置、文件级存储、无需服务器 | 原型开发、单机应用、教学项目 |
| Bootstrap | 响应式、组件丰富、快速出界面 | 后台管理、企业级应用前端 |
小提示:如果你以后做生产项目,可以把 SQLite 换成 MySQL 或 PostgreSQL,Flask 的 ORM 层基本不用改代码。这就是分层设计的好处。
1.3 开发环境配置
好,理论说完了,咱们动手。环境配置这块我尽量说细一点,因为很多新手就是卡在这一步。
1.3.1 Python 环境准备
我建议用 Python 3.8 以上版本。怎么检查?打开终端敲:
python --version
如果版本低于 3.8,去官网下载安装。我个人习惯用 pyenv 管理多版本,但新手直接用系统 Python 也行。
1.3.2 创建虚拟环境
这一步千万别省。我曾经见过有人把所有项目都装到全局环境里,结果依赖冲突到崩溃。
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境(Windows)
venv\Scripts\activate
# 激活虚拟环境(Mac/Linux)
source venv/bin/activate
激活成功后,终端前面会出现 (venv) 字样,说明你已经在虚拟环境里了。
1.3.3 安装依赖包
我们需要的包不多,就这几个:
pip install flask
pip install flask-sqlalchemy
pip install flask-wtf
pip install bootstrap-flask
或者你也可以一次性安装:
pip install flask flask-sqlalchemy flask-wtf bootstrap-flask
注意:如果你在中国大陆,建议用国内镜像源,不然下载慢到怀疑人生。比如:pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple
1.4 项目初始化
环境配好了,咱们来搭项目骨架。我习惯的目录结构是这样的:
ticket_system/
├── app/
│ ├── __init__.py # 应用工厂
│ ├── models.py # 数据模型
│ ├── forms.py # 表单定义
│ ├── routes.py # 路由视图
│ └── templates/ # HTML 模板
│ ├── base.html
│ └── ...
├── venv/ # 虚拟环境
├── config.py # 配置文件
├── run.py # 启动入口
└── requirements.txt # 依赖清单
先创建项目文件夹:
mkdir ticket_system
cd ticket_system
然后创建 run.py,这是我们的启动文件:
from app import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True)
再创建 config.py,放配置信息:
import os
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY') or 'dev-key-123'
SQLALCHEMY_DATABASE_URI = 'sqlite:///ticket.db'
SQLALCHEMY_TRACK_MODIFICATIONS = False
最后创建 app/__init__.py,这是应用工厂:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import Config
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
app.config.from_object(Config)
db.init_app(app)
with app.app_context():
from . import routes
db.create_all()
return app
核心要点:这种「应用工厂」模式是 Flask 官方推荐的,好处是方便测试和扩展。以后你想加个蓝图或者换数据库,改起来特别顺手。
1.5 验证环境是否跑通
在终端运行:
python run.py
如果看到类似这样的输出,说明环境配置成功了:
* Serving Flask app 'app'
* Debug mode: on
* Running on http://127.0.0.1:5000
打开浏览器访问 http://127.0.0.1:5000,如果出现 404 页面,别慌——因为我们还没写路由。这说明 Flask 已经跑起来了,只是没有页面而已。
我的经验:第一次跑通的时候,哪怕只看到一个 404,也值得高兴。因为这意味着你的开发环境、项目结构、依赖安装全部正确。后面的事情就是「往里面填代码」了。
1.6 本章小结
这一章我们做了三件事:
- 分析了工单系统的业务场景——客户提交、客服分派、技术处理、客户确认、管理员监控
- 确定了技术选型——Flask + SQLite + Bootstrap,轻量实用
- 搭建了开发环境并初始化了项目——虚拟环境、依赖安装、项目骨架、启动验证
下一章我们会开始设计数据库模型,把「客户」「工单」「客服」这些实体用代码表示出来。到时候你会看到,SQLAlchemy 操作 SQLite 有多方便。
嗯,今天就到这儿。有问题随时交流。
公众号:蓝海资料掘金营,微信deep3321