当前位置:   article > 正文

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

python blueprint

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

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

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

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

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


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

创建admin模块

1、目录结构

在app目录下,新建admin目录

2、蓝图的创建于注册

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

 

创建蓝图,新建views.py:

  1. from flask import Blueprint
  2. admin_blueprint = Blueprint('admin', __name__)
  3. @admin_blueprint.route('/index')
  4. def admin_index():
  5. return '<h1>this is admin blueprint</h1>'

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

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

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

修改app目录下的__init__.py:

  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from flask import Flask
  4. app = Flask(__name__)
  5. from app.controller import test
  6. from flask_sqlalchemy import SQLAlchemy
  7. # 配置数据库的连接
  8. app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@localhost:3306/flask'
  9. app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
  10. db = SQLAlchemy(app)
  11. from app.controller import sql
  12. ##########本次修改 ############
  13. from .admin.views import admin_blueprint
  14. app.register_blueprint(admin_blueprint, url_prefix='/admin')

测试:

3、蓝图资源

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

  1. admin_blueprint = Blueprint('admin', __name__,
  2.                      template_folder='templates',
  3.                      static_folder='static')


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

 

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

  1. print admin_blueprint.root_path
  2. # Read file ~/admin/doc/info.txt
  3. with admin_blueprint.open_resource('doc/info.txt') as f:
  4.     info = f.read()
  5. print info

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

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

 

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/587066
推荐阅读
相关标签
  

闽ICP备14008679号