[python]Flask(介绍+应用)

110 阅读3分钟

Flask 是一个轻量级的 Python Web 应用框架,它提供了构建 Web 应用程序所需的核心功能,同时保持简单和灵活的设计理念。

以下是详细介绍:

1. Flask 是什么?

  • 微框架:Flask 被设计为"微框架",提供核心功能但保持简洁,可通过扩展添加其他功能
  • WSGI 工具包:基于 Werkzeug WSGI 工具包
  • 模板引擎:使用 Jinja2 模板引擎
  • 轻量级:核心代码约 5000 行,无强制依赖
  • 灵活:不限制项目结构,开发者可自由组织代码

2. 主要功能

功能描述
路由系统URL 到 Python 函数的映射
模板渲染Jinja2 模板引擎集成
请求处理处理 HTTP 请求和响应
会话管理客户端会话支持
错误处理HTTP 错误处理机制
扩展支持通过插件扩展功能
测试客户端内置测试支持
开发服务器内置开发用 Web 服务器

3. 安装 Flask

pip install flask

4. 基础应用示例

示例 1: 基本路由

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: 动态路由和模板

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:

<!DOCTYPE html>
<html>
<head>
    <title>用户页面</title>
</head>
<body>
    <h1>你好, {{ name }}!</h1>
</body>
</html>

示例 3: 表单处理

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. 项目结构示例

/myflaskapp
    /venv               # 虚拟环境
    /app
        __init__.py     # 应用工厂
        /templates      # HTML模板
        /static         # CSS/JS/图片
        /routes         # 路由
            home.py
            auth.py
        /models         # 数据模型
            user.py
    config.py           # 配置文件
    requirements.txt    # 依赖列表

7. 进阶使用技巧

  1. 蓝图(Blueprints):模块化组织大型应用
# 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')
  1. 配置管理
app.config['SECRET_KEY'] = 'your_secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
  1. 错误处理
@app.errorhandler(404)
def page_not_found(error):
    return render_template('404.html'), 404

8. Flask 适用场景

  • 小型到中型 Web 应用
  • RESTful API 服务
  • 微服务架构
  • 快速原型开发
  • 教学和初学者项目

9. 与 Django 对比

特性FlaskDjango
类型微框架全功能框架
学习曲线平缓较陡峭
灵活性中等
内置功能核心功能ORM/Admin等
适用规模中小型项目大型项目

Flask 的优势在于其简洁性和灵活性,开发者可以根据需求自由组合扩展,而不必遵循固定的项目结构。这使得 Flask 成为快速开发和构建 API 的理想选择。对于复杂的企业级应用,可以通过添加扩展来实现所需功能。