Flask 是一个轻量级的 Python Web 应用框架,它提供了构建 Web 应用程序所需的核心功能,同时保持简单和灵活的设计理念。
以下是详细介绍:
1. Flask 是什么?
- 微框架:Flask 被设计为"微框架",提供核心功能但保持简洁,可通过扩展添加其他功能
- WSGI 工具包:基于 Werkzeug WSGI 工具包
- 模板引擎:使用 Jinja2 模板引擎
- 轻量级:核心代码约 5000 行,无强制依赖
- 灵活:不限制项目结构,开发者可自由组织代码
2. 主要功能
功能 | 描述 |
---|---|
路由系统 | URL 到 Python 函数的映射 |
模板渲染 | Jinja2 模板引擎集成 |
请求处理 | 处理 HTTP 请求和响应 |
会话管理 | 客户端会话支持 |
错误处理 | HTTP 错误处理机制 |
扩展支持 | 通过插件扩展功能 |
测试客户端 | 内置测试支持 |
开发服务器 | 内置开发用 Web 服务器 |
3. 安装 Flask
bash
pip install flask
4. 基础应用示例
示例 1: 基本路由
python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return '首页内容'
@app.route('/about')
def about():
return '关于我们页面'
if __name__ == '__main__':
app.run(debug=True)
示例 2: 动态路由和模板
python
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/user/<username>')
def show_user(username):
# 渲染模板并传递参数
return render_template('user_profile.html', name=username)
if __name__ == '__main__':
app.run()
创建 templates/user_profile.html
:
html
<!DOCTYPE html>
<html>
<head>
<title>用户页面</title>
</head>
<body>
<h1>你好, {{ name }}!</h1>
</body>
</html>
示例 3: 表单处理
python
from flask import Flask, request, redirect, url_for
app = Flask(__name__)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
return redirect(url_for('dashboard', user=username))
return '''
<form method="post">
<input type="text" name="username">
<input type="submit" value="登录">
</form>
'''
@app.route('/dashboard/<user>')
def dashboard(user):
return f'欢迎来到仪表盘, {user}!'
if __name__ == '__main__':
app.run()
5. 常用扩展
- 数据库:Flask-SQLAlchemy (ORM)
- 表单处理:Flask-WTF
- 用户认证:Flask-Login
- REST API:Flask-RESTful
- 邮件发送:Flask-Mail
6. 项目结构示例
bash
/myflaskapp
/venv # 虚拟环境
/app
__init__.py # 应用工厂
/templates # HTML模板
/static # CSS/JS/图片
/routes # 路由
home.py
auth.py
/models # 数据模型
user.py
config.py # 配置文件
requirements.txt # 依赖列表
7. 进阶使用技巧
- 蓝图(Blueprints):模块化组织大型应用
python
# auth.py
from flask import Blueprint
auth_bp = Blueprint('auth', __name__)
@auth_bp.route('/login')
def login():
return "登录页面"
# main.py
from flask import Flask
from .auth import auth_bp
app = Flask(__name__)
app.register_blueprint(auth_bp, url_prefix='/auth')
- 配置管理
python
app.config['SECRET_KEY'] = 'your_secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
- 错误处理
python
@app.errorhandler(404)
def page_not_found(error):
return render_template('404.html'), 404
8. Flask 适用场景
- 小型到中型 Web 应用
- RESTful API 服务
- 微服务架构
- 快速原型开发
- 教学和初学者项目
9. 与 Django 对比
特性 | Flask | Django |
---|---|---|
类型 | 微框架 | 全功能框架 |
学习曲线 | 平缓 | 较陡峭 |
灵活性 | 高 | 中等 |
内置功能 | 核心功能 | ORM/Admin等 |
适用规模 | 中小型项目 | 大型项目 |
Flask 的优势在于其简洁性和灵活性,开发者可以根据需求自由组合扩展,而不必遵循固定的项目结构。这使得 Flask 成为快速开发和构建 API 的理想选择。对于复杂的企业级应用,可以通过添加扩展来实现所需功能。