type
status
date
slug
summary
tags
category
icon
password
Flask快速入门
Flask框架学习笔记
📚 目录
🎯 项目概述
项目简介
这是一个使用Flask框架开发的个人博客系统,适合学习Flask框架的核心概念和最佳实践。
功能特性
- ✅ 用户注册和登录
- ✅ 文章的发布、编辑、删除
- ✅ 文章评论系统
- ✅ 响应式设计(Bootstrap 5)
- ✅ 分页功能
- ✅ 用户权限控制
- ✅ 美观的用户界面
技术栈
- 后端框架: Flask 2.3.3
- 数据库: SQLite (可扩展为MySQL/PostgreSQL)
- ORM: SQLAlchemy
- 用户认证: Flask-Login
- 表单处理: Flask-WTF
- 数据库迁移: Flask-Migrate
- 前端框架: Bootstrap 5
- 图标: Font Awesome
📁 项目结构
🔧 核心概念
1. 应用工厂模式
优势:
- 支持多个应用实例
- 便于测试
- 配置灵活
2. 蓝图(Blueprint)
作用:
- 组织相关功能
- 模块化开发
- 避免命名冲突
3. 路由系统
📦 依赖包详解
包名 | 版本 | 作用 | 核心功能 |
Flask | 2.3.3 | 核心Web框架 | 路由、模板、请求处理 |
Flask-SQLAlchemy | 3.0.5 | 数据库ORM | 数据库操作、模型定义 |
Flask-Login | 0.6.3 | 用户认证 | 登录状态管理、会话处理 |
Flask-WTF | 1.1.1 | 表单处理 | 表单验证、CSRF保护 |
Flask-Migrate | 4.0.5 | 数据库迁移 | 数据库结构变更管理 |
Werkzeug | 2.3.7 | 工具库 | 密码加密、安全工具 |
email-validator | 2.0.0 | 邮箱验证 | 邮箱格式验证 |
python-dotenv | 1.0.0 | 环境变量 | 配置管理 |
详细说明
Flask - 核心框架
Flask-SQLAlchemy - 数据库ORM
Flask-Login - 用户认证
Flask-WTF - 表单处理
🔄 数据库迁移
为什么需要数据库迁移?
问题:直接使用
db.create_all()
的限制
- 只能创建新表,不能修改现有表结构
- 会丢失数据,不适合生产环境
- 无法处理复杂的数据库变更解决方案:使用 Flask-Migrate
迁移命令
migrations/ 目录结构
迁移工作流程
- 修改模型:在
models.py
中添加/修改字段
- 生成迁移:
flask db migrate -m "添加用户头像字段"
- 检查迁移:查看生成的迁移脚本
- 应用迁移:
flask db upgrade
- 验证结果:检查数据库结构
实际示例
📝 表单验证
表单验证的完整流程
1. 表单定义
2. 路由处理
form.validate_on_submit()
的工作流程
验证器类型
验证器 | 作用 | 示例 |
DataRequired() | 必填字段 | validators=[DataRequired()] |
Email() | 邮箱格式 | validators=[Email()] |
Length(min=2, max=20) | 长度限制 | validators=[Length(min=2, max=20)] |
EqualTo('password') | 字段相等 | validators=[EqualTo('password')] |
Regexp(r'^[A-Za-z0-9_]+$') | 正则表达式 | validators=[Regexp(r'^[A-Za-z0-9_]+$')] |
自定义验证方法
模板中的表单渲染
🛣️ 路由系统
路由装饰器
路由参数类型
类型 | 说明 | 示例 |
int | 整数 | <int:post_id> |
string | 字符串(默认) | <string:username> |
float | 浮点数 | <float:price> |
path | 路径 | <path:filepath> |
uuid | UUID | <uuid:user_id> |
URL生成
蓝图路由
🎨 模板系统
模板继承
模板语法
变量输出
条件判断
循环
宏(Macro)
过滤器
📊 数据模型
模型定义
字段类型
类型 | 说明 | 示例 |
db.Integer | 整数 | id = db.Column(db.Integer, primary_key=True) |
db.String(length) | 字符串 | username = db.Column(db.String(64)) |
db.Text | 长文本 | content = db.Column(db.Text) |
db.DateTime | 日期时间 | created_at = db.Column(db.DateTime, default=datetime.utcnow) |
db.Boolean | 布尔值 | is_active = db.Column(db.Boolean, default=True) |
db.Float | 浮点数 | price = db.Column(db.Float) |
字段选项
选项 | 说明 | 示例 |
primary_key=True | 主键 | id = db.Column(db.Integer, primary_key=True) |
unique=True | 唯一 | email = db.Column(db.String(120), unique=True) |
nullable=False | 非空 | username = db.Column(db.String(64), nullable=False) |
default=value | 默认值 | created_at = db.Column(db.DateTime, default=datetime.utcnow) |
index=True | 索引 | email = db.Column(db.String(120), index=True) |
关系定义
查询操作
🚀 最佳实践
1. 项目结构
2. 配置管理
3. 错误处理
4. 日志记录
5. 安全最佳实践
- 使用环境变量存储敏感信息
- 启用CSRF保护
- 验证用户输入
- 使用HTTPS
- 定期更新依赖包
6. 性能优化
- 使用数据库索引
- 实现缓存机制
- 优化数据库查询
- 使用CDN加载静态资源
📚 学习资源
官方文档
扩展学习
- API开发:Flask-RESTful
- 缓存系统:Flask-Caching
- 邮件发送:Flask-Mail
- 文件上传:Flask-Uploads
- 搜索功能:Flask-WhooshAlchemy
项目扩展建议
- 添加搜索功能
- 实现文章标签系统
- 添加用户头像上传
- 实现邮件通知
- 添加API接口
- 集成Redis缓存
- 添加单元测试
🎯 总结
Flask是一个轻量级但功能强大的Python Web框架,通过这个博客项目,我们学习了:
- 应用工厂模式:创建可配置的Flask应用
- 蓝图系统:模块化组织代码
- 数据库ORM:使用SQLAlchemy操作数据库
- 表单处理:使用Flask-WTF处理用户输入
- 用户认证:使用Flask-Login管理用户状态
- 数据库迁移:使用Flask-Migrate管理数据库变更
- 模板系统:使用Jinja2渲染动态页面
这些概念和工具构成了Flask应用开发的基础,掌握它们就能构建功能完整的Web应用。
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
- Author:Meak.li
- URL:https://cat-cat.xyz//article/217b39bf-d5fd-8062-b6d0-fb3d8feb72ed
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!