Python 现代开发学习笔记

(六)Blueprint、端点名称与 url_for

账号和书籍各有多条路由,可以先分别登记,再统一加入应用。Blueprint 保存这一组登记操作。

# 项目文件:demos/blueprint_demo.py
from flask import Blueprint, Flask, url_for

bp = Blueprint("books", __name__, url_prefix="/books")


@bp.get("/<int:book_id>")
def detail(book_id):
    return {"id": book_id}


app = Flask(__name__)
app.register_blueprint(bp)
with app.test_request_context():
    # 端点是 blueprint名.函数名,编号用于填入路径。
    print(url_for("books.detail", book_id=3))
print(app.test_client().get("/books/3").json)

Blueprint("books", __name__, url_prefix="/books") 给这组功能起名 books,同时加路径前缀。app.register_blueprint(bp) 才把它加入具体应用。Blueprint 本身不是另一台服务器,仍由同一个 Flask 应用处理请求。

端点名称是反向生成 URL 的查找键。这里函数名为 detail,所属 Blueprint 为 books,所以 url_for("books.detail", book_id=3) 得到 /books/3。改动路径之后,模板仍然可以按端点生成地址。url_for("static", filename="style.css") 则生成静态资源地址。

完整书架使用 auth、shelf、api 三个 Blueprint。它们分别登记账号页面、书架页面和只读 JSON 接口;路径与端点不必同名,例如 / 的端点为 shelf.index。相关接口见 Flask Blueprint。

Blueprint 先记录前缀和函数,注册进应用后得到完整路由,再用 books.detail 和编号三反向生成 books/3

笔记正文与全部题解 · Ctrl / ⌘ K