【Flask】Flask蓝图使用范例

【Flask】Flask蓝图使用范例

      • Flask蓝图使用范例
        • 文件结构
        • 1. 认证蓝图 (auth/routes.py)
        • 2. 博客蓝图 (blog/routes.py)
        • 3. 主应用 (app.py)
      • 关键点解释
      • 测试路由
      • 蓝图优势


Flask蓝图使用范例

在Flask中,蓝图(Blueprint)用于模块化组织大型应用,将相关路由分组管理。以下是一个完整的蓝图使用示例:

文件结构
myapp/
├── app.py                # 主应用
├── auth/                 # 认证蓝图模块
│   ├── __init__.py
│   ├── routes.py         # 认证路由
│   └── templates/        # 蓝图专属模板目录(可选)
│       └── auth/
│           └── login.html
└── blog/                 # 博客蓝图模块
    ├── __init__.py
    └── routes.py         # 博客路由
1. 认证蓝图 (auth/routes.py)
from flask import Blueprint, render_template

# 创建蓝图实例,设置前缀为'/auth'
auth_bp = Blueprint(
    'auth', 
    __name__,
    url_prefix='/auth',
    template_folder='templates'  # 指定蓝图专属模板目录
)

@auth_bp.route('/login')
def login():
    # 访问蓝图专属模板:templates/auth/login.html
    return render_template('auth/login.html')

@auth_bp.route('/logout')
def logout():
    return 'Logged out successfully!'
2. 博客蓝图 (blog/routes.py)
from flask import Blueprint, jsonify

blog_bp = Blueprint('blog', __name__, url_prefix='/blog')

@blog_bp.route('/posts')
def list_posts():
    return jsonify([
        {'id': 1, 'title': 'Flask Tutorial'},
        {'id': 2, 'title': 'Blueprint Guide'}
    ])

@blog_bp.route('/post/')
def get_post(id):
    return f'Post #{id} details'
3. 主应用 (app.py)
from flask import Flask
from auth.routes import auth_bp
from blog.routes import blog_bp

app = Flask(__name__)

# 注册蓝图
app.register_blueprint(auth_bp)
app.register_blueprint(blog_bp)

@app.route('/')
def home():
    return 'Home Page - Login | Blog'

if __name__ == '__main__':
    app.run(debug=True)

关键点解释

  1. 蓝图创建

    • Blueprint('name', __name__, url_prefix='/path') 创建蓝图实例
    • url_prefix 为所有路由添加统一前缀
    • template_folder 指定蓝图专属模板目录
  2. 路由注册

    • 使用 @blueprint_name.route() 装饰器定义路由
    • 路由将自动获得蓝图前缀(如 /auth/login
  3. 蓝图注册

    • 主应用使用 app.register_blueprint() 注册蓝图
    • 支持多次注册同一蓝图(需指定不同前缀)
  4. 模板处理

    • 全局模板:templates/ 目录
    • 蓝图专属模板:blueprint_name/templates/(需在蓝图中设置 template_folder

测试路由

  • 首页:http://localhost:5000/
  • 登录页:http://localhost:5000/auth/login
  • 博客API:http://localhost:5000/blog/posts
  • 文章详情:http://localhost:5000/blog/post/1

蓝图优势

  1. 模块化:分离功能到独立模块
  2. 可复用:蓝图可跨项目使用
  3. 路由隔离:避免路由命名冲突
  4. 延迟注册:蓝图可先创建后注册

你可能感兴趣的:(【Flask】Flask蓝图使用范例)