1 蓝图资源

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

admin_bp = Blueprint('admin', __name__,
template_folder='templates',
static_folder='static')

这样,该蓝图的模板目录就在”admin/templates”下,而静态目录就在”admin/static”下。当然,其实默认值就是这两个位置,不指定也没关系。我们可以用蓝图对象的”root_path”属性获取其主资源路径,”open_resource()”方法访问主资源路径下的某个文件,比如:

# 假设 current app 在路径 /home/bjhee/flask-app,
#这个将会返回 /home/bjhee/flask-app/admin
print admin_bp.root_path
# 读取文件 /home/bjhee/flask-app/admin/files/info.txt
with admin_bp.open_resource('files/info.txt') as f:
info = f.read()
print info

2 使用蓝图可以分为四个步骤

  1. 创建一个蓝图的包,例如users,并在__init__.py文件中创建蓝图对象
users=Blueprint('users',__name__)

2.在这个蓝图目录下, 创建views.py文件,保存当前蓝图使用的视图函数

@admin.route('/')
def home():
return 'user.home'

3 在users/init.py中引入views.py中所有的视图函数

from flask import Blueprint
# 等同于原来在 manage.py里面的 app = Flask()
users=Blueprint('users',__name__) from .views import *

4 在主应用main.py文件中的app对象上注册这个users蓝图对象

from users import users
app.register_blueprint(users,url_prefix='/users')

当这个应用启动后,通过/users/可以访问到蓝图中定义的视图函数

3 运行机制

  • 蓝图是保存了一组将来可以在应用对象上执行的操作,注册路由就是一种操作
  • 当在app对象上调用 route 装饰器注册路由时,这个操作将修改对象的url_map路由表
  • 然而,蓝图对象根本没有路由表,当我们在蓝图对象上调用route装饰器注册路由时,它只是在内部的一个延迟操作记录列表defered_functions中添加了一个项
  • 当执行app对象的 register_blueprint() 方法时,应用对象将从蓝图对象的 defered_functions 列表中取出每一项,并以自身作为参数执行该匿名函数,即调用应用对象的 add_url_rule() 方法,这将真正的修改应用对象的usr_map路由表

4 蓝图用于为应用提供目录划分:

小型应用程序文件结构

/ yourapplication
     / yourapplication
         / __init__.py
         / views
             __init__.py
             admin.py
             frontend.py
         / static
             / style.css
         / templates
             layout.html
             index.html
             login.html
             ...
 
大型应用程序文件结构
/ yourapplication
     __init__.py
     / apps
         __init__.py
         / frontend
             __init__.py
             views.py
             / static
                 style.css
             / templates
                 index.html
                 about.html
                 ...
         / admin
             __init__.py
             views.py
             / static
                 style.css
             / templates
                 list_items.html
                 show_item.html
                 ...
 

其他:

    • 蓝图URL前缀:xxx = Blueprint('account', __name__,url_prefix='/xxx')
    • 蓝图子域名:xxx = Blueprint('account', __name__,subdomain='admin')
      # 前提需要给配置SERVER_NAME: app.config['SERVER_NAME'] = 'wupeiqi.com:5000'
      # 访问时:admin.wupeiqi.com:5000/login.html

最新文章

  1. Monkey基础
  2. Synchronized 个人深解
  3. 《C#编程》课件 - C#基础
  4. .NET异常问题总结
  5. Android Glide+CircleImageView实现加载圆形图片列表
  6. (9)nehe教程3--添加颜色
  7. Linux下如何在打开终端的时候自动配置相关环境
  8. QQ音乐的请求
  9. linux安装xunsearch
  10. 101个linq例子
  11. iOS开发——Xcode快捷键
  12. Fiddler基础使用二之捕获手机应用https请求
  13. 使用nfs作为根文件系统启动,(3)
  14. openEntityForm时候如何给关于(regardingobjectid)类型查找字段赋值?
  15. [LeetCode] Prefix and Suffix Search 前后缀搜索
  16. httpstatus类的状态有哪些
  17. [C#]typeof,Gettype()和is的区别
  18. linux resin 基本站点配置
  19. ie请求缓存问题,页面内容没有及时更新
  20. socks5代理使用和安装配置

热门文章

  1. rollup环境搭建(es6转es5、压缩、本地服务器、热更新)
  2. 为什么要使用Mybatis-现有持久化技术的对比
  3. 网络聚合Network Teaming
  4. ida 动态调试apk
  5. cb46a_c++_STL_算法_逆转和旋转reverse_rotate函数advance
  6. c++无法解析的外部符号 "int const bufferSize
  7. CODING DevOps 系列第四课:DevOps 中的质量内建实践
  8. 2020年最佳Java调试工具(翻译)
  9. Linux 进程间通信(IPC)总结
  10. 使用Jmeter如何测试下载接口