Lazy loaded image
框架学习
🥰Flask快速入门
Words 2706Read Time 7 min
2025-6-19
2025-6-20
type
status
date
slug
summary
tags
category
icon
password
😀
Flask快速入门

Flask框架学习笔记

📚 目录

  1. 项目概述
  1. 项目结构
  1. 核心概念
  1. 依赖包详解
  1. 数据库迁移
  1. 表单验证
  1. 路由系统
  1. 模板系统
  1. 数据模型
  1. 最佳实践

🎯 项目概述

项目简介

这是一个使用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/ 目录结构

迁移工作流程

  1. 修改模型:在 models.py 中添加/修改字段
  1. 生成迁移flask db migrate -m "添加用户头像字段"
  1. 检查迁移:查看生成的迁移脚本
  1. 应用迁移flask db upgrade
  1. 验证结果:检查数据库结构

实际示例


📝 表单验证

表单验证的完整流程

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加载静态资源

📚 学习资源

官方文档

扩展学习

  1. API开发:Flask-RESTful
  1. 缓存系统:Flask-Caching
  1. 邮件发送:Flask-Mail
  1. 文件上传:Flask-Uploads
  1. 搜索功能:Flask-WhooshAlchemy

项目扩展建议

  1. 添加搜索功能
  1. 实现文章标签系统
  1. 添加用户头像上传
  1. 实现邮件通知
  1. 添加API接口
  1. 集成Redis缓存
  1. 添加单元测试

🎯 总结

Flask是一个轻量级但功能强大的Python Web框架,通过这个博客项目,我们学习了:
  1. 应用工厂模式:创建可配置的Flask应用
  1. 蓝图系统:模块化组织代码
  1. 数据库ORM:使用SQLAlchemy操作数据库
  1. 表单处理:使用Flask-WTF处理用户输入
  1. 用户认证:使用Flask-Login管理用户状态
  1. 数据库迁移:使用Flask-Migrate管理数据库变更
  1. 模板系统:使用Jinja2渲染动态页面
这些概念和工具构成了Flask应用开发的基础,掌握它们就能构建功能完整的Web应用。
 
💡
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
上一篇
Vue快速入门
下一篇
scrapy框架