跳转至

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的路由系统和视图函数。