Flask 第十一课 -- 蓝图 (Blueprints)

目录

一. 前言

二. 创建蓝图

三. 定义蓝图

四. 注册蓝图

五. 使用蓝图中的模板和静态文件

六. 在蓝图中使用请求钩子

七. 在蓝图中定义错误处理


一. 前言

Flask 的蓝图(Blueprints)是一种组织代码的机制,允许你将 Flask 应用分解成多个模块。这样可以更好地组织应用逻辑,使得应用更具可维护性和可扩展性。

每个蓝图可以有自己的路由、视图函数、模板和静态文件,这样可以将相关的功能分组。

通过使用蓝图,你可以将 Flask 应用拆分成多个模块,每个模块处理相关的功能,使得代码更加清晰和易于管理。

  1. 创建蓝图:在独立的模块中定义蓝图,并指定路由和视图函数。

  2. 注册蓝图:在主应用中注册蓝图,并设置路由前缀。

  3. 使用蓝图中的模板和静态文件:将模板和静态文件放在蓝图的 templates 和 static 文件夹中。

  4. 使用请求钩子和错误处理:在蓝图中定义请求钩子和错误处理函数。

二. 创建蓝图

创建蓝图涉及到以下几个步骤:

定义蓝图:在一个独立的模块(文件)中定义蓝图。

注册蓝图:在主应用中注册蓝图,使其生效。

假设我们要创建一个博客应用,其中包含用户管理和博客功能,我们可以将这些功能分成两个蓝图:auth 和 blog。

项目结构:

yourapp/
│
├── app.py
├── auth/
│   ├── __init__.py
│   └── routes.py
│
└── blog/
    ├── __init__.py
    └── routes.py

三. 定义蓝图

auth/routes.py 文件代码:

from flask import Blueprint, render_template, request, redirect, url_for

auth = Blueprint('auth', __name__)

@auth.route('/login')
def login():
    return render_template('login.html')

@auth.route('/logout')
def logout():
    return redirect(url_for('auth.login'))

@auth.route('/register')
def register():
    return render_template('register.html')

Blueprint('auth', __name__):创建一个名为 auth 的蓝图。

蓝图中定义的路由函数可以用来处理请求。

blog/routes.py 文件代码:

from flask import Blueprint, render_template

blog = Blueprint('blog', __name__)

@blog.route('/')
def index():
    return render_template('index.html')

@blog.route('/post/<int:post_id>')
def post(post_id):
    return f'Post ID: {post_id}'

 Blueprint('blog', __name__):创建一个名为 blog 的蓝图。

四. 注册蓝图

app.py 文件代码:

from flask import Flask

app = Flask(__name__)

# 导入蓝图
from auth.routes import auth
from blog.routes import blog

# 注册蓝图
app.register_blueprint(auth, url_prefix='/auth')
app.register_blueprint(blog, url_prefix='/blog')

if __name__ == '__main__':
    app.run(debug=True)
  • app.register_blueprint(auth, url_prefix='/auth'):注册 auth 蓝图,并将所有的路由前缀设置为 /auth
  • app.register_blueprint(blog, url_prefix='/blog'):注册 blog 蓝图,并将所有的路由前缀设置为 /blog

五. 使用蓝图中的模板和静态文件

蓝图中的模板和静态文件应放在蓝图的文件夹下的 templates 和 static 子文件夹中。

项目结构:

yourapp/
│
├── app.py
├── auth/
│   ├── __init__.py
│   ├── routes.py
│   └── templates/
│       ├── login.html
│       └── register.html
│
└── blog/
    ├── __init__.py
    ├── routes.py
    └── templates/
        ├── index.html
        └── post.html

六. 在蓝图中使用请求钩子

蓝图支持请求钩子,例如 before_request 和 after_request,可以在蓝图中定义这些钩子来处理请求和响应。

auth/routes.py 文件代码:

@auth.before_app_request
def before_request():
    # 执行在每个请求之前的操作
    pass

@auth.after_app_request
def after_request(response):
    # 执行在每个请求之后的操作
    return response

七. 在蓝图中定义错误处理

蓝图也可以定义自己的错误处理函数。

blog/routes.py 文件代码:

@blog.errorhandler(404)
def page_not_found(error):
    return 'Page not found', 404
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜡笔小流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值