Blueprint__蓝本

本文详细介绍了Flask框架中蓝本的概念及其实现方式。解释了为何使用蓝本,包括解决程序工厂函数带来的路由和错误处理的问题。文章还介绍了如何创建和注册蓝本,以及在蓝本中定义路由和错误处理程序的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用蓝本的原因

使用程序工厂函数使得路由(查找)变复杂【路由是根据url查找处理函数的过程】
但脚本程序中,程序实例存在于全局作用域,路由使用app.route修饰器定义
但是使用了工厂函数,程序延迟创建,当调用create_app()之后,程序app创建后,才可以用app.route修饰器,但是太晚了
同样的还有错误页面处理需要用到程序app,进行app.errorhandler修饰器定义

蓝本介绍

flask认可的兼容的支持的模块化方法,提供blueprint方法实现模块化组织程序结构
我们可以使用blueprint进行不同模块的编写,不同模块之间有着不同的静态文件、模板文件、view文件,十分方便代码的维护和管理

功能

Blueprint通过把实现不同功能的module分开,从而把一个大的application分割成各自实现不同功能的module。在一个Blueprint中可以调用另一个blueprint的view function, 但要加相应的blueprint名。
和程序类似可以定义路由
不同的是:
蓝本中定义的路由处于休眠状态,知道蓝本注册到程序上,路由才真正的是程序的一部分

蓝本定义路由的方法

蓝本使用全局作用域时,蓝本定义路由的方法和但脚本文件一样

蓝本的定义

蓝本可以再单个文件中定义,也可以使用结构化的方式在包中的多个模块中创建
程序包中创建一个子包,用于保存蓝本
蓝本的使用:

创建蓝本
from flask import Blueprint
main = Blueprint('main',__name__)
from . import views,errors # 蓝本定义的路由和错误处理
  1. 实例化Blueprint()创建蓝本
  2. 参数 :1)蓝本的名字 2)蓝本所在的包或模块
  3. 程序的路由保存在app/main/views.py的模块中,错误处理在app/main/errors.py的模块中
  4. from . import views,errors
    导入这两个模板,可以让路由和错误处理程序和蓝本关联
    导入是在appp/main/init.py中的末尾,避免循环导入依赖,因为在views.py中还要蓝本
蓝本注册到程序:

蓝本是在工厂函数的create_app()中注册到程序的

def create_app(config_name):
    ...
    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    return app
蓝本中的错误处理程序
from flask import render_template
from . import main

@main.app_errorhandler(404)
def page_not_found(e):
    render_template('404.html'),404

@main.app_errorhandler(500)
def internal_server_error(e):
    render_template('500.html'),404
  1. 注册程序全局的错误处理程序,使用app_errorhandler
蓝本中定义的程序路由
from datetime import datetime
from flask import render_template,session,redirect,url_for

from . improt main
from .forms import NameForm
from .. import db
from ..models import User

@main.route('',methods = ['GET','POST'])
def index():
    ...
    return redirect(url_for('index'))
render_template('index.html ',
                form = form
                name = session.get('name')
                known = session.get('known',False)
                current_time = datetime.utcnow()
                )
与之前的不同点:
  1. 路由修饰器由蓝本提供
  2. url_for ():
  3. 在但脚本文件中,参数是路由的端点名,默认视图函数的名字
    flask为蓝本中的全部端点加一个命名空间,可以在不同的蓝本中使用相同的端点名定义的视图函数
    不产生冲突,命名空间就是蓝本的名字,所以视图函数注册的端点名是main.index
  4. url_for()支持简写的端点形式,蓝本中省略蓝本命
    url_for(‘.index’)
    这种写法,命名空间是当前请求所在的蓝本

==================================================================================================================

蓝本在全局作用域中定义路由,不同的程序功能使用不同的蓝本例如将用户认证相关的路由在auth蓝本中定义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值