Python Flask快速入门教程(3)——蓝图Blueprint

Flask蓝图提供了模块化管理程序路由的功能,使程序结构清晰、简单易懂。为什么要用到蓝图呢?举个例子,一般项目有用户和管理员后台2部分。2个部分要互不影响,又要共享应用配置。这时候蓝图可以“分类模块化”,实现目标要求。

Flask中的蓝图适用于以下情况:

  • 将应用程序纳入一组蓝图中。这是大型应用的理想选择; 项目可以实例化一个应用程序对象,初始化几个扩展,并注册一组蓝图。
  • 在URL前缀和/或子域中的应用程序上注册蓝图。URL前缀/子域中的参数成为蓝图中所有视图函数的公共视图参数(具有默认值)。
  • 在具有不同URL规则的应用程序上多次注册蓝图。
  • 通过蓝图提供模板过滤器,静态文件,模板和其他实用程序。蓝图不必实现应用程序或查看功能。
  • 在初始化Flask扩展时,在应用程序中为任何这些情况注册蓝图。

Flask中的蓝图不是一个可插拔的应用程序,因为它实际上不是一个应用程序 - 它是一组可以在应用程序上注册的操作,甚至多次。为什么没有多个应用程序对象?您可以这样做(请参阅应用程序调度),但您的应用程序将具有单独的配置,并将在WSGI层进行管理。

相反,蓝图在Flask级别提供分离,共享应用程序配置,并且可以根据需要在注册时更改应用程序对象。缺点是,一旦创建应用程序,您无法取消注册蓝图,而不必销毁整个应用程序对象。


在上一篇的基础上,改造项目

创建admin模块

1、目录结构

在app目录下,新建admin目录

2、蓝图的创建于注册

在admin目录下创建空的__init__.py,表明admin表示它是一个Python的包。

 

创建蓝图,新建views.py:

from flask import Blueprint

admin_blueprint = Blueprint('admin', __name__)


@admin_blueprint.route('/index')
def admin_index():
    return '<h1>this is admin blueprint</h1>'

这里创建了蓝图对象”admin_blueprint”,它使用起来类似于Flask应用的app对象,举个例子,它有自己路由”admin_blueprint.route()”。

初始化Blueprint对象的第一个参数’admin’指定了这个蓝图的名称,第二个参数指定了该蓝图所在的模块名,这里自然是当前文件。

接着在Flask应用主程序中(即app)注册该蓝图,

修改app目录下的__init__.py:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from flask import Flask

app = Flask(__name__)

from app.controller import test


from flask_sqlalchemy import SQLAlchemy

# 配置数据库的连接
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@localhost:3306/flask'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db = SQLAlchemy(app)

from app.controller import sql

##########本次修改 ############


from .admin.views import admin_blueprint
app.register_blueprint(admin_blueprint, url_prefix='/admin')

测试:

3、蓝图资源

蓝图有自己的目录,它的所有资源都在其目录下。蓝图的资源目录是由创建Blueprint对象时传入的模块名”__name__”所在的位置决定的。同时,我们可以指定蓝图自己的模板目录和静态目录。比如我们创建蓝图时传入:

admin_blueprint = Blueprint('admin', __name__,

                     template_folder='templates',

                     static_folder='static')


这样,该蓝图的模板目录就在”admin/templates”下,而静态目录就在”admin/static”下。其实默认值也是这两个位置,不指定也没关系。

 

我们可以用蓝图对象的”root_path”属性获取其主资源路径,”open_resource()”方法访问主资源路径下的某个文件,比如:


print admin_blueprint.root_path


# Read file ~/admin/doc/info.txt

with admin_blueprint.open_resource('doc/info.txt') as f:

    info = f.read()

print info

到这里蓝图的基本用法,就讲完了。

总结:蓝本的作用是使程序结构明晰,模块化

 

参考:http://flask.pocoo.org/docs/1.0/blueprints/

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小牛呼噜噜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值