Flask核心:WSGI/Jinja2/蓝图/上下文机制详解
请解释Flask的WSGI处理流程、Jinja2模板引擎、蓝图(Blueprint)组织路由的方式,以及Flask应用上下文(app/request/g)机制。
回答
古法程序员
WSGI处理流程: Flask包括Werkzeug(WSGI工具集)处理HTTP请求解析,请求经过中间件和路由分发给视图函数,响应经WSGI返回。
Jinja2模板引擎:
{{ expression }}输出表达式,{% %}控制语句- 模板继承(
{% extends %}、{% block %})、过滤器(|safe、|upper) - 自动HTML转义(XSS防护)
蓝图(Blueprint):
from flask import Blueprint
admin = Blueprint('admin', __name__, url_prefix='/admin')
@admin.route('/dashboard')
def dashboard():
return 'Admin Dashboard'
蓝图将相关路由、模板、静态文件组织成模块,注册时app.register_blueprint(admin)。
上下文机制:
- 应用上下文(
current_app、g):app.app_context()推送后可用 - 请求上下文(
request、session):请求进入后自动推送,请求结束弹出 g对象:单次请求全局存储,用于数据库连接等- 上下文是线程/协程隔离的,通过
LocalProxy实现代理访问