目录

  1. 什么是中间件和扩展
  2. Flask 中的中间件
  3. 常用 Flask 扩展
  4. 自定义扩展
  5. 参考资料

什么是中间件和扩展

  • 中间件:在 Flask 中,中间件通常指在请求和响应处理过程中插入的自定义逻辑,用于拦截或修改请求/响应。Flask 使用 WSGI 中间件机制。
  • 扩展:Flask 扩展是第三方库,封装了常见功能(如数据库、表单验证、认证等),通过与 Flask 集成简化开发。

Flask 中的中间件

Flask 没有传统 Web 框架中的“中间件”概念,但可以通过 WSGI 中间件或自定义装饰器实现类似功能。

示例:自定义 WSGI 中间件

app.py

from flask import Flask
from werkzeug.wrappers import Request, Response

app = Flask(__name__)

class LoggingMiddleware:
    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        # 在请求前记录信息
        print(f"Request received: {environ['PATH_INFO']}")
        return self.app(environ, start_response)

@app.route('/')
def home():
    return '欢迎!'

if __name__ == '__main__':
    # 应用中间件
    app.wsgi_app = LoggingMiddleware(app.wsgi_app)
    app.run(debug=True)
  • 解释
  • LoggingMiddleware:一个简单的 WSGI 中间件,记录请求路径。
  • app.wsgi_app:Flask 的 WSGI 应用对象,可以被中间件包裹。

示例:使用装饰器模拟中间件


from flask import Flask
from functools import wraps

app = Flask(name)

def log_request(f):
@wraps(f)
def decorated_function(*args, *kwargs): print(“请求被处理”) return f(args, **kwargs)
return decorated_function

@app.route(‘/’)
@log_request
def home():
return ‘欢迎!’

if name == ‘main‘:
app.run(debug=True)

  • 解释
  • @log_request:装饰器在视图函数执行前打印日志。

常用 Flask 扩展

Flask 生态中有许多扩展,以下是一些常用扩展及其用法:

  1. Flask-SQLAlchemy(数据库操作)
  • 安装pip install flask-sqlalchemy
  • 用法from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' db = SQLAlchemy(app)
  1. Flask-WTF(表单处理)
  • 安装pip install flask-wtf
  • 用法from flask import Flask from flask_wtf import FlaskForm from wtforms import StringField app = Flask(__name__) app.config['SECRET_KEY'] = 'your-secret-key' class MyForm(FlaskForm): name = StringField('Name')
  1. Flask-Login(用户认证)
  • 安装pip install flask-login
  • 用法from flask import Flask from flask_login import LoginManager app = Flask(__name__) app.config['SECRET_KEY'] = 'your-secret-key' login_manager = LoginManager(app)
  1. Flask-RESTful(构建 API)
  • 安装pip install flask-restful
  • 用法from flask import Flask from flask_restful import Api, Resource app = Flask(__name__) api = Api(app) class HelloWorld(Resource): def get(self): return {'message': 'Hello, World!'} api.add_resource(HelloWorld, '/')

自定义扩展

你可以创建自己的 Flask 扩展,通常包括初始化逻辑和可选的配置。

示例

项目结构

my_app/
├── extensions.py
└── app.py
  1. extensions.py
class MyExtension:
    def __init__(self, app=None):
        if app is not None:
            self.init_app(app)

    def init_app(self, app):
        app.config.setdefault('MY_EXTENSION_SETTING', 'default')
        @app.before_request
        def before_request():
            print("自定义扩展:请求开始")
  1. app.py
    “`python
    from flask import Flask
    from extensions import MyExtension

app = Flask(name)
my_ext = MyExtension(app)

@app.route(‘/’)
def home():
return ‘欢迎!’

if name == ‘main‘:
app.run(debug=True)

  • 解释
  • MyExtension:自定义扩展,在每个请求前打印消息。
  • init_app:延迟初始化,支持应用工厂模式。

参考资料


中间件和扩展为 Flask 提供了强大的扩展能力。如果需要特定扩展的深入示例(例如 Flask-Login 的认证流程),请告诉我!