2. 开发环境搭建:Python虚拟环境配置、Flask框架安装、SQLite数据库初始化、项目目录结构设计
好,咱们正式开始动手了。
这一章,我带你搭好整个项目的“地基”。说白了,就是把你电脑变成一个能跑药盒系统的开发环境。别小看这一步,我在项目里见过太多人因为环境没配好,后面折腾一整天都跑不起来。
嗯,咱们一步步来。
2.1 Python虚拟环境:为什么必须用?
先问个问题:你电脑上可能同时有好几个Python项目。有的用Flask 2.0,有的用Flask 3.0。如果不隔离,它们会打架。
虚拟环境就是干这个的。它给每个项目一个独立的“小房间”,里面装的Python版本、第三方库互不干扰。
我个人习惯,每个项目都新建一个虚拟环境。哪怕只是写个测试脚本,也这么干。为什么?因为有一次我图省事,直接在全局环境装了个新版本的库,结果另一个跑了半年的项目直接崩了……从那以后,我再也不敢偷懒了。
核心原则:一个项目,一个虚拟环境。
2.2 创建并激活虚拟环境
打开你的终端(Windows用CMD或PowerShell,Mac/Linux用终端),先确认Python已安装:
python --version
如果显示Python 3.8以上,就没问题。我建议用Python 3.10或3.11,比较稳定。
然后,找个干净的目录,比如 D:\pillbox-system,执行:
python -m venv venv
这行命令会在当前目录下生成一个 venv 文件夹。里面就是你的虚拟环境。
激活它:
- Windows:
venv\Scripts\activate - Mac/Linux:
source venv/bin/activate
激活成功后,终端前面会出现 (venv) 字样。看到这个,就说明你已经在“小房间”里了。
小技巧:如果你用的是VS Code,打开项目文件夹后,按 Ctrl+Shift+P,搜索“Python: Select Interpreter”,选那个带 venv 路径的。这样终端会自动激活虚拟环境,省得每次手动敲命令。
2.3 安装Flask框架
虚拟环境激活后,安装Flask就一行命令:
pip install flask
等一下,它会自动安装好几个依赖包。比如 Werkzeug(WSGI工具集)、Jinja2(模板引擎)、MarkupSafe 等等。这些都是Flask的“左膀右臂”。
安装完成后,验证一下:
python -c "import flask; print(flask.__version__)"
如果输出版本号,比如 3.0.0,就说明装好了。
注意:千万不要用 sudo pip install(Linux/Mac)或以管理员身份运行(Windows)。这会把包装到全局环境,违背了虚拟环境的初衷。我曾经见过有人这么干,结果虚拟环境形同虚设。
2.4 项目目录结构设计
好,环境有了。接下来是项目的“骨架”。一个清晰的项目结构,能让你少走很多弯路。
我推荐这样的目录结构:
pillbox-system/
│
├── app/ # 核心应用代码
│ ├── __init__.py # 初始化Flask应用
│ ├── routes.py # 路由(URL处理)
│ ├── models.py # 数据库模型
│ └── templates/ # HTML模板
│ └── index.html
│
├── venv/ # 虚拟环境(不提交到Git)
├── instance/ # 实例文件夹(存放数据库文件)
│ └── pillbox.db # SQLite数据库文件
│
├── requirements.txt # 依赖清单
├── run.py # 启动入口
└── README.md # 项目说明
解释一下几个关键点:
app/文件夹:所有业务逻辑都放这里。我习惯把路由、模型、模板分开,这样后期维护时,找东西特别快。instance/文件夹:Flask会自动识别这个文件夹,用来存放运行时产生的文件,比如SQLite数据库。它不会被提交到Git,保证了数据安全。requirements.txt:记录所有依赖包。生成方式很简单:pip freeze > requirements.txt。别人拿到项目后,直接pip install -r requirements.txt就能装好所有依赖。
我的经验:一开始就把结构搭好,比后面再重构省心十倍。你想想看,如果所有代码都堆在一个文件里,找路由要翻半天,找数据库配置也要翻半天……嗯,那画面太美我不敢看。
2.5 SQLite数据库初始化
SQLite是Python自带的轻量级数据库,不需要额外安装。对于药盒这种小项目,完全够用。
在 app/models.py 中,我们定义数据库模型:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
created_at = db.Column(db.DateTime, default=db.func.now())
def __repr__(self):
return f'<User {self.username}>'
然后在 app/__init__.py 中初始化数据库:
from flask import Flask
from .models import db
def create_app():
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///../instance/pillbox.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
with app.app_context():
db.create_all() # 创建所有表
return app
这里有个细节:sqlite:///../instance/pillbox.db 中的 ../instance 是相对于 app 文件夹的路径。这样数据库文件会生成在项目根目录下的 instance 文件夹里。
避坑指南:我曾经犯过一个错误——把数据库路径写成了相对路径 sqlite:///pillbox.db。结果数据库文件直接生成在项目根目录,乱七八糟的。后来我统一用 instance 文件夹,世界清净了。
2.6 启动入口文件
最后,在项目根目录创建 run.py:
from app import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True)
运行它:
python run.py
如果看到类似这样的输出:
* Serving Flask app 'app'
* Debug mode: on
* Running on http://127.0.0.1:5000
恭喜你,环境搭建成功了!打开浏览器访问 http://127.0.0.1:5000,虽然现在还是空白页面,但Flask已经在跑了。
总结一下这一章:
- 创建并激活虚拟环境,隔离项目依赖
- 安装Flask框架,验证版本
- 设计清晰的目录结构,把代码、模板、数据库分开
- 初始化SQLite数据库,定义User模型
- 编写启动入口,成功运行Flask应用
下一章,咱们开始写真正的业务逻辑——用户注册和登录。嗯,那才是重头戏。