一、项目概述与环境搭建

大家好,我是老张。做客服工单系统这个选题,其实是我自己踩过坑后的决定。

几年前我带团队给一家电商公司做售后系统,当时选了个特别重的框架,结果光环境配置就折腾了两周。后来我反思——对于教学来说,轻量、实用、能快速看到效果才是王道。所以这次我选了 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 本章小结

这一章我们做了三件事:

  1. 分析了工单系统的业务场景——客户提交、客服分派、技术处理、客户确认、管理员监控
  2. 确定了技术选型——Flask + SQLite + Bootstrap,轻量实用
  3. 搭建了开发环境并初始化了项目——虚拟环境、依赖安装、项目骨架、启动验证

下一章我们会开始设计数据库模型,把「客户」「工单」「客服」这些实体用代码表示出来。到时候你会看到,SQLAlchemy 操作 SQLite 有多方便。

嗯,今天就到这儿。有问题随时交流。


公众号:蓝海资料掘金营,微信deep3321