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安装¶
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. 虚拟环境¶
为什么使用虚拟环境¶
创建虚拟环境¶
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) 标识
退出虚拟环境¶
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)
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. 代码格式化¶
💡 最佳实践¶
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')
📝 练习题¶
基础题¶
- 什么是Flask?它有哪些特点?
- 为什么要使用虚拟环境?
- Flask应用工厂模式有什么好处?
进阶题¶
- 创建一个Flask应用,包含多个路由。
- 实现一个配置管理系统。
- 设计一个可扩展的项目结构。
实践题¶
- 搭建一个完整的Flask开发环境。
- 创建一个包含首页、关于页、联系页的简单网站。
- 使用蓝图组织你的Flask应用。
📚 推荐阅读¶
🔗 下一章¶
路由与视图 - 学习Flask的路由系统和视图函数。