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应用

下一章,咱们开始写真正的业务逻辑——用户注册和登录。嗯,那才是重头戏。