跳到主要内容

Flask 核心

问题

Flask 的核心概念有哪些?蓝图、请求上下文、扩展机制怎么用?

答案

基础应用

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/api/users", methods=["GET"])
def get_users():
page = request.args.get("page", 1, type=int)
return jsonify({"users": [], "page": page})

@app.route("/api/users", methods=["POST"])
def create_user():
data = request.get_json()
return jsonify(data), 201

蓝图(Blueprint)

from flask import Blueprint

user_bp = Blueprint("user", __name__, url_prefix="/api/users")

@user_bp.route("/")
def list_users():
return jsonify([])

# 注册蓝图
app.register_blueprint(user_bp)

请求上下文

Flask 使用线程局部变量werkzeug.local.LocalStack)实现请求上下文:

from flask import request, g, current_app

# request:当前请求对象
# g:请求级别的全局存储(每次请求重置)
# current_app:当前应用实例

@app.before_request
def before():
g.start_time = time.time()

@app.after_request
def after(response):
duration = time.time() - g.start_time
response.headers["X-Duration"] = str(duration)
return response

常见面试问题

Q1: Flask 的请求上下文原理?

答案

Flask 使用 LocalStack(基于 threading.local)在每个线程中维护独立的请求上下文栈。请求进入时压入 requestg 等对象,请求结束时弹出。这让多线程环境下每个请求互不干扰。

Q2: Flask 和 Django 怎么选?

答案

  • Django:需要 Admin、ORM、认证等开箱即用功能的大型项目
  • Flask:微服务、简单 API、需要高度自定义的项目

相关链接