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

Flask 基础组件(七):蓝图的更多相关文章

  1. Flask 基础组件(六):Session

    除请求对象之外,还有一个 session 对象.它允许你在不同请求间存储特定用户的信息.它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使用会话,你需要设置一个密钥. 设 ...

  2. Flask 基础组件(十):中间件

    from flask import Flask, flash, redirect, render_template, request app = Flask(__name__) app.secret_ ...

  3. Flask 基础组件(九):请求扩展

    #!/usr/bin/env python # -*- coding:utf-8 -*- from flask import Flask, Request, render_template app = ...

  4. Flask 基础组件(八):message

    message是一个基于Session实现的用于保存数据的集合,其特点是:使用一次就删除. from flask import Flask, flash, redirect, render_templ ...

  5. Flask 基础组件(五):请求和响应

    from flask import Flask from flask import request from flask import render_template from flask impor ...

  6. Flask 基础组件(四):模板

    1.模板的使用 1.1  语法 1.1.1 流程控制 逻辑语法 Jinja2模板语言中的 for {% for foo in g %} {% endfor %} Jinja2模板语言中的 if {% ...

  7. Flask 基础组件(三):路由系统

    1. 常见路由 @app.route('/user/<username>') @app.route('/post/<int:post_id>') @app.route('/po ...

  8. Flask 基础组件(二):配置文件

    配置参数 flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为: { 'DEBUG': get_debug_flag(default=False), 是否开启 ...

  9. Flask 基础组件(一):基本使用

    Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...

随机推荐

  1. TensorFlow从0到1之TensorFlow多层感知机函数逼近过程(23)

    Hornik 等人的工作(http://www.cs.cmu.edu/~bhiksha/courses/deeplearning/Fall.2016/notes/Sonia_Hornik.pdf)证明 ...

  2. (三)POI-格式设置

    原文链接:https://blog.csdn.net/class157/article/details/92800980 package com.java.poi; import org.apache ...

  3. Dubbo——SPI及自适应扩展原理

    文章目录 引言 正文 一.什么是SPI? 1. Java SPI的实现 2. Dubbo SPI实现原理 由配置文件得到的猜想 SPI源码 二.自适应扩展机制 三.Dubbo IOC 总结 引言 Du ...

  4. GitHub如何回滚代码?

    1.git log 查看commit hash值 执行git log:查看commit hash值. 2.执行git reset --hard xxxx xxxx表示的是commit hash 值. ...

  5. 学习ASP.NET Core(11)-解决跨域问题与程序部署

    上一篇我们介绍了系统日志与测试相关的内容并添加了相关的功能:本章我们将介绍跨域与程序部署相关的内容 一.跨域 1.跨域的概念 1.什么是跨域? 一个请求的URL由协议,域名,端口号组成,以百度的htt ...

  6. 01MySQL内核分析-The Skeleton of the Server Code

    摘要 这个官方文档一段对MySQL内核分析的一个向导.是对MySQL一条insert语句写入到MySQL数据库的分析. 但是,对于MySQL 5.7版本来说,基本上都是写入到innodb引擎.但也还是 ...

  7. JUnit单元测试%MODULE_WORKING_DIR%' does not exist

    解决办法: idea > Run -> Edit Configurations>JUnit(或者application,根据自己报错的类型选择)>单独设置:选中有单元测试的类 ...

  8. SpringMVC 学习笔记(7)spring和springmvc的整合

    58. 尚硅谷_佟刚_SpringMVC_Spring整合SpringMVC_解决方案.avi 解决办法让springmvc值扫描@Control控制层和@ControllerAdvice对应的异常处 ...

  9. mybatis面试入门

    第一步创建一个java project 导入mybatis需要的jar包,创建与数据库一一对应的javabean对象 第二步:创建mybatis的配置文件 sqlMapconfig.xml 第三步:创 ...

  10. 四. django template模版

    往前端浏览器pull一些字符串,这些字符串是一些数据, 那如果想让这些数据按我们的某种格式美化一点/增加样式/图片,就需要用到django提供的模版--模版就是为了让数据看起更美观. 加载模版 dja ...