跳转至

Flask 简介与环境搭建

📖 章节简介

本章将介绍 Flask 框架的基本概念,帮助你搭建 Flask 开发环境,并创建第一个 Flask 应用。

🌟 Flask 简介

1. 什么是 Flask

Flask 是一个用 Python 编写的轻量级 Web 应用框架。它被称为"微框架",因为它保持核心简单,但可以通过扩展来增加功能。

Flask 特点

Python
# Flask核心特点
flask_features = {
    '轻量级': {
        'description': '核心精简,只包含必要功能',
        'benefits': [
            '易于学习和使用',
            '启动快速',
            '资源占用少'
        ]
    },
    '灵活性': {
        'description': '不强制使用特定工具或库',
        'benefits': [
            '自由选择数据库',
            '自由选择模板引擎',
            '自由选择认证方式'
        ]
    },
    '可扩展性': {
        'description': '丰富的扩展生态系统',
        'popular_extensions': [
            'Flask-SQLAlchemy - 数据库ORM',
            'Flask-WTF - 表单处理',
            'Flask-Login - 用户认证',
            'Flask-Migrate - 数据库迁移'
        ]
    },
    '开发友好': {
        'description': '简洁的API和良好的文档',
        'benefits': [
            '代码易读易写',
            '调试方便',
            '社区活跃'
        ]
    }
}

2. Flask vs 其他框架

Python
# Flask vs Django vs FastAPI
framework_comparison = {
    'Flask': {
        'type': '微框架',
        'learning_curve': '低',
        'flexibility': '高',
        'built_in_features': '少',
        'best_for': [
            '小型项目',
            '快速原型开发',
            '需要高度定制的项目'
        ]
    },
    'Django': {
        'type': '全栈框架',
        'learning_curve': '中',
        'flexibility': '中',
        'built_in_features': '多',
        'best_for': [
            '大型项目',
            '快速开发',
            '需要完整功能的项目'
        ]
    },
    'FastAPI': {
        'type': '现代异步框架',
        'learning_curve': '中',
        'flexibility': '高',
        'built_in_features': '中',
        'best_for': [
            'API开发',
            '高性能应用',
            '异步编程需求'
        ]
    }
}

🛠️ 环境搭建

1. Python 安装

检查 Python 版本

Bash
# 检查Python是否已安装
python --version
# 或
python3 --version

# 如果未安装,请访问 https://www.python.org/downloads/ 下载安装

Windows 安装

Bash
# 1. 下载Python安装包
# 访问 https://www.python.org/downloads/

# 2. 运行安装程序
# 勾选 "Add Python to PATH"

# 3. 验证安装
python --version
pip --version

macOS 安装

Bash
# 使用Homebrew安装
brew install python

# 验证安装
python3 --version
pip3 --version

Linux 安装

Bash
# Ubuntu/Debian
sudo apt update
sudo apt install python3 python3-pip

# CentOS/RHEL
sudo yum install python3 python3-pip

# 验证安装
python3 --version
pip3 --version

2. 虚拟环境

为什么使用虚拟环境

Python
# 虚拟环境的好处
virtualenv_benefits = [
    '隔离项目依赖',
    '避免版本冲突',
    '保持系统Python环境整洁',
    '便于项目迁移和部署'
]

创建虚拟环境

Bash
# 使用venv创建虚拟环境(Python 3.3+)
python -m venv venv

# 或使用virtualenv
pip install virtualenv
virtualenv venv

# 指定Python版本
python3.12 -m venv venv

激活虚拟环境

Bash
# Windows
venv\Scripts\activate

# macOS/Linux
source venv/bin/activate

# 激活后,命令提示符前会出现 (venv) 标识

退出虚拟环境

Bash
# Windows/Linux/macOS
deactivate

3. 安装 Flask

Bash
# 激活虚拟环境后安装Flask
pip install flask

# 验证安装
python -c "import flask; print(flask.__version__)"

# 安装开发依赖
pip install flask flask-wtf flask-sqlalchemy flask-login flask-migrate

# 生成requirements.txt
pip freeze > requirements.txt

# 从requirements.txt安装依赖
pip install -r requirements.txt

📁 项目结构

1. 基本项目结构

Text Only
my_flask_app/
├── app/
│   ├── __init__.py          # 应用工厂
│   ├── routes.py            # 路由定义
│   ├── models.py            # 数据模型
│   ├── forms.py             # 表单定义
│   ├── templates/           # 模板文件
│   │   ├── base.html        # 基础模板
│   │   ├── index.html       # 首页
│   │   └── login.html       # 登录页
│   └── static/              # 静态文件
│       ├── css/
│       │   └── style.css
│       ├── js/
│       │   └── main.js
│       └── images/
│           └── logo.png
├── config.py                # 配置文件
├── requirements.txt          # 依赖列表
├── .env                     # 环境变量
├── .gitignore               # Git忽略文件
└── run.py                   # 应用入口

2. 创建项目

Bash
# 创建项目目录
mkdir my_flask_app
cd my_flask_app

# 创建虚拟环境
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 安装Flask
pip install flask

# 创建项目结构
mkdir app
mkdir app/templates
mkdir app/static
mkdir app/static/css
mkdir app/static/js
mkdir app/static/images

🚀 第一个 Flask 应用

1. 最简单的 Flask 应用

Python
# app.py
from flask import Flask

# 创建Flask应用实例
app = Flask(__name__)

# 定义路由
@app.route('/')
def hello_world():
    return 'Hello, World!'

# 运行应用
if __name__ == '__main__':
    app.run(debug=True)
Bash
# 运行应用
python app.py

# 访问 http://127.0.0.1:5000/

2. 使用应用工厂模式

Python
# app/__init__.py
from flask import Flask

def create_app():
    """应用工厂函数"""
    app = Flask(__name__)

    # 配置应用
    app.config['SECRET_KEY'] = 'your-secret-key'

    # 注册蓝图
    from app.routes import main
    app.register_blueprint(main)

    return app
Python
# app/routes.py
from flask import Blueprint, render_template

main = Blueprint('main', __name__)

@main.route('/')
def index():
    return render_template('index.html')

@main.route('/about')
def about():
    return render_template('about.html')
Python
# run.py
from app import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True)

3. 完整的项目示例

Python
# config.py
import os

class Config:
    """基础配置"""
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'dev-secret-key'
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
        'sqlite:///' + os.path.join(os.path.abspath(os.path.dirname(__file__)), 'app.db')
    SQLALCHEMY_TRACK_MODIFICATIONS = False

class DevelopmentConfig(Config):
    """开发环境配置"""
    DEBUG = True

class ProductionConfig(Config):
    """生产环境配置"""
    DEBUG = False

class TestingConfig(Config):
    """测试环境配置"""
    TESTING = True
    SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'

config = {
    'development': DevelopmentConfig,
    'production': ProductionConfig,
    'testing': TestingConfig,
    'default': DevelopmentConfig
}
Python
# app/__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from config import config

db = SQLAlchemy()
login_manager = LoginManager()

def create_app(config_name='default'):
    """应用工厂函数"""
    app = Flask(__name__)

    # 加载配置
    app.config.from_object(config[config_name])

    # 初始化扩展
    db.init_app(app)
    login_manager.init_app(app)
    login_manager.login_view = 'auth.login'

    # 注册蓝图
    from app.main import bp as main_bp
    app.register_blueprint(main_bp)

    from app.auth import bp as auth_bp
    app.register_blueprint(auth_bp, url_prefix='/auth')

    # 创建数据库表
    with app.app_context():
        db.create_all()

    return app

🔧 开发工具

1. VS Code 配置

Text Only
// .vscode/settings.json
{
    "python.defaultInterpreterPath": "${workspaceFolder}/venv/bin/python",
    "python.testing.pytestEnabled": true,
    "[python]": {
        "editor.defaultFormatter": "ms-python.black-formatter",
        "editor.formatOnSave": true
    },
    "files.exclude": {
        "**/__pycache__": true,
        "**/.pytest_cache": true,
        "**/venv": true
    }
}

2. 调试配置

Text Only
// .vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Flask",
            "type": "python",
            "request": "launch",
            "module": "flask",
            "env": {
                "FLASK_APP": "run.py",
                "FLASK_DEBUG": "1"
            },
            "args": [
                "run",
                "--no-debugger",
                "--no-reload"
            ],
            "jinja": true,
            "justMyCode": true
        }
    ]
}

3. 代码格式化

Bash
# 安装代码格式化工具
pip install black isort flake8

# 格式化代码
black .
isort .

# 代码检查
flake8 .

💡 最佳实践

1. 项目组织

Python
# 推荐的项目组织方式
project_organization = {
    '使用蓝图': '将应用拆分为多个模块',
    '分离关注点': '路由、模型、表单分开',
    '使用工厂模式': '便于测试和配置',
    '环境变量': '敏感信息使用环境变量',
    '版本控制': '使用Git管理代码'
}

2. 配置管理

Python
# 使用环境变量
import os
from dotenv import load_dotenv

# 加载.env文件
load_dotenv()

class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY')
    DATABASE_URL = os.environ.get('DATABASE_URL')
Bash
# .env文件(不要提交到版本控制)
SECRET_KEY=your-secret-key
DATABASE_URL=sqlite:///app.db
Text Only
# .gitignore
venv/
__pycache__/
*.pyc
.env
instance/
.pytest_cache/
.coverage
htmlcov/

📝 练习题

基础题

  1. 什么是 Flask ?它有哪些特点?
  2. 为什么要使用虚拟环境?
  3. Flask 应用工厂模式有什么好处?

进阶题

  1. 创建一个 Flask 应用,包含多个路由。
  2. 实现一个配置管理系统。
  3. 设计一个可扩展的项目结构。

实践题

  1. 搭建一个完整的 Flask 开发环境。
  2. 创建一个包含首页、关于页、联系页的简单网站。
  3. 使用蓝图组织你的 Flask 应用。

📚 推荐阅读

🔗 下一章

路由与视图 - 学习 Flask 的路由系统和视图函数。