1、项目导览与环境搭建:了解图片资源管理系统的核心功能,搭建 Python + Flask + SQLite 开发环境
各位同学,欢迎来到《从零构建图片资源管理系统》的第一章。
说实话,我见过太多人一上来就撸代码,结果写到一半发现架构选错了,或者数据库根本撑不住业务场景。我自己早期带团队时也踩过这个坑——项目做到第三周,发现 Flask 版本不兼容,SQLite 的并发写入直接把服务搞挂了。嗯,从那以后我养成了一个习惯:先看全景,再动手。
这一章,我们不急着写代码。先搞清楚我们要做什么,再搭好环境。你想想看,盖房子总得先看图纸、备好工具吧?
1.1 图片资源管理系统到底长什么样?
说白了,这个系统就是一个「图片仓库」。用户上传图片,系统存起来,然后能查、能删、能管理。我参与过的几个企业内部系统,核心功能其实都差不多。
我们这门课要做的系统,包含以下核心模块:
| 模块 | 功能描述 | 我踩过的坑 |
|---|---|---|
| 图片上传 | 支持单张/批量上传,限制文件类型和大小 | 曾经没做文件类型校验,用户传了个 .exe 进来…… |
| 图片列表 | 分页展示所有图片,支持缩略图预览 | 缩略图生成没做异步,页面加载慢到崩溃 |
| 图片搜索 | 按文件名、上传时间、标签等条件筛选 | SQL 没加索引,数据量一上去就卡死 |
| 图片删除 | 单张删除或批量删除,同时清理磁盘文件 | 只删了数据库记录,磁盘文件成了孤儿 |
| 图片详情 | 展示原图、EXIF 信息、上传时间等 | EXIF 读取没做异常处理,遇到损坏图片直接 500 |
这些功能看起来简单,但组合起来就是一个完整的企业级应用雏形。我个人习惯把这种项目叫做「麻雀虽小,五脏俱全」。
核心思路: 我们不会一次性把所有功能都做完,而是每章迭代一个模块。第一章先把地基打牢,后面你自然会发现,前面的设计决定了后面的开发效率。
1.2 技术选型:为什么是 Python + Flask + SQLite?
你可能要问:市面上框架那么多,为什么选这三样?
我直接说结论:为了降低学习曲线,同时保留生产级扩展能力。
- Python:语法简洁,生态丰富。图片处理有 Pillow,文件操作有 pathlib,几乎不用写太多胶水代码。
- Flask:轻量、灵活。不像 Django 那样「全家桶」,Flask 让你自己选组件。我做过好几个内部工具,Flask 都是首选,因为启动快、改起来也快。
- SQLite:零配置、文件型数据库。对于单机应用或小团队工具,SQLite 完全够用。我曾经帮一个创业团队搭原型,SQLite 撑了半年才切到 PostgreSQL。
下面这张图,就是我们整个系统的技术架构:
我的建议: 如果你以后要上生产环境,把 SQLite 换成 PostgreSQL,Flask 前面加个 Nginx 反向代理,这套架构可以直接扛住日均几万次的图片请求。
1.3 搭建开发环境:一步一步来
环境搭建这件事,看起来简单,但版本不对真的能折腾死人。我记得有一次帮同事排查问题,搞了半天发现他装的是 Python 2.7……
下面我列一个清单,你照着做就行:
- 安装 Python 3.8+(推荐 3.10 或 3.11)
- 创建虚拟环境(venv 或 conda 都行)
- 安装 Flask 和依赖
- 验证环境是否正常
1.3.1 安装 Python
去 python.org 下载对应系统的安装包。安装时记得勾选「Add Python to PATH」。
验证方法:打开终端,输入:
python --version
# 输出示例:Python 3.11.4
注意: Windows 用户如果装了多个 Python 版本,建议用 py -3.11 指定版本。我曾经见过有人系统里同时有 Python 2.7、3.8、3.10,结果 pip 装到了错误的版本上。
1.3.2 创建虚拟环境
虚拟环境的作用,说白了就是给每个项目一个独立的「小房间」,互不干扰。
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
# Windows:
venv\Scripts\activate
# macOS / Linux:
source venv/bin/activate
# 激活后,终端前面会出现 (venv) 字样
1.3.3 安装 Flask 和依赖
我们先把核心依赖装上。后面每章会逐步添加新的库。
pip install flask==3.0.0
pip install Pillow==10.1.0
你可以用 pip list 查看已安装的包。我个人习惯把依赖写进 requirements.txt,方便团队复现:
pip freeze > requirements.txt
生成的 requirements.txt 内容大概长这样:
Flask==3.0.0
Pillow==10.1.0
Werkzeug==3.0.1
1.3.4 验证环境:写一个最小 Flask 应用
我们来写一个最简单的 Flask 应用,确保所有东西都能跑起来。
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "图片资源管理系统已启动!"
if __name__ == '__main__':
app.run(debug=True)
运行它:
python app.py
打开浏览器,访问 http://127.0.0.1:5000。如果看到「图片资源管理系统已启动!」,恭喜你,环境搭建成功。
一个小技巧: debug=True 模式下,你改代码后 Flask 会自动重启,不用手动关掉再开。但生产环境千万别开 debug,会暴露敏感信息。
1.4 项目目录结构:从一开始就规整
很多新手喜欢把所有文件堆在根目录,项目一大了就乱成一锅粥。我建议从一开始就按功能分好目录:
image-manager/
├── app.py # 应用入口
├── requirements.txt # 依赖清单
├── venv/ # 虚拟环境(不提交到 Git)
├── static/ # 静态文件
│ ├── css/
│ ├── js/
│ └── images/
├── templates/ # HTML 模板
├── uploads/ # 用户上传的图片
└── database/ # SQLite 数据库文件
这个结构不是拍脑袋想的。我在实际项目中迭代过好几版,这个结构最平衡——既不会太扁平导致混乱,也不会太深导致路径难记。
避坑指南: 记得把 venv/ 和 uploads/ 加到 .gitignore 里。我曾经不小心把虚拟环境提交到 Git 仓库,结果 repo 体积直接飙到 200MB……
1.5 本章小结
这一章我们做了三件事:
- 搞清楚了图片资源管理系统的核心功能模块
- 确定了技术栈:Python + Flask + SQLite
- 搭建了开发环境,跑通了第一个 Flask 应用