使用蓝本的原因

使用程序工厂函数使得路由(查找)变复杂【路由是根据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_blueprintapp.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_forfrom . 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 = formname = 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蓝本中定义

Blueprint__蓝本相关推荐

  1. 使用Angular CLI从蓝本生成代码

    第一篇文章是: "使用angular cli生成angular5项目" : http://www.cnblogs.com/cgzl/p/8594571.html 这篇文章主要是讲生 ...

  2. matplotlib绘图蓝本

    matplotlib是python最著名的绘图库,它提供了一整套API,用于进行图表绘制.数据显示,其图片输出质量达到了科技论文的印刷质量. 但是,matplotlib绘制图表时,需要配置的东西比较多 ...

  3. 常态化疫情防控下会展经济的“长沙蓝本”

    作者|刘丰 近日,中国会展经济研究会发布了<展览活动与展览场所新冠病毒肺炎疫情防控指南>和<会议活动与会议场所新冠病毒肺炎疫情防控指南>,作为疫情防控常态化下全国会展业的行业标 ...

  4. Flask入门flask-script 蓝本 钩子函数(三)

    1 flask-script扩展库 概念: 是一个flask终端运行的解析器 ,因为项目完成以后,代码改动会有风险,所以借助终端完成不同启动项的配置 安装 pip3 install flask-scr ...

  5. java blueprint_blueprint(蓝本/蓝图)学习笔记

    在按<Flask Web开发:基于Python的Web应用开发实战>实践的过程中,我一直有一个疑问,即蓝本的优势在哪里 按照书中的操作,我们从一开始的做的 app = Flask(__na ...

  6. 李时珍编撰《本草纲目》以《证类本草》为蓝本

    作者:中医药文化网 <本草纲目>,本草著作,52卷.明代李时珍(东璧)撰于嘉靖三十一年(1552年)至万历六年(1578年),稿凡三易.此书采用"目随纲举"编写体例,故 ...

  7. 小蓝本 第一本 《因式分解技巧》 第八章 多项式的一次因式 笔记 (第八天)

    小蓝本 第一本 <因式分解技巧> 第八章 多项式的一次因式 笔记 (第八天) 前言 余数定理 有理根求法 第一步 第二步(可能有理根多的情况下,可以用) 第三步 快速识别特殊有理根 情况1 ...

  8. 小蓝本 第一本 《因式分解技巧》 第七章 综合运用 笔记 (第七天)

    小蓝本 第一本 <因式分解技巧> 第七章 综合运用 笔记 (第七天) 前言 换元法 好题 例2 题目 解法 经验 补充 例3 题目 解法 经验 例5 题目 解法 补充 例9 题目 解法 经 ...

  9. 树莓派4B,以树莓派官方系统为蓝本,定制自己的树莓派系统

    一.目的 树莓派4B已于2019年6月24号发布了,感谢树莓派实验室(http://shumeipai.nxez.com/)提供的树莓派4B开发板,可以继续我的树莓派教程.从现在起,后续所有课程将全部 ...

  10. 小蓝本 第一本《因式分解技巧》 第九章 待定系数法 笔记 (第九天)

    小蓝本 第一本<因式分解技巧> 第九章 待定系数法 笔记 (第九天) 前言 待定系数法 二次因式 一次因式分解缺陷 二次因式分解方法 注意 既约的情况 拓展 习题9 题目 题解 前言 已经 ...

最新文章

  1. 摆脱 FM!这些推荐系统模型真香
  2. 大家都说 Java 反射效率低,为什么呢?
  3. android 每隔2秒执行_Android中实现延迟执行操作的三种方法
  4. 程序员求职面试三部曲之一:选择合适的工作单位
  5. Trie:hdu 4825、1251、1247、Poj 3764
  6. 飞流直下三千尺的acd看图软件下载
  7. java -jar命令引导启动Springboot项目的那点事
  8. openlayer 图层上下_OpenLayers 3 的图层体系结构
  9. 高效管理http连接
  10. java的的socket编程_javasocket编程
  11. mappedBy的具体使用及其含义
  12. 第三代计算机的内存是,Intel正式发布Cooper Lake、第三代傲腾内存和新数据中心SSD...
  13. [bzoj2827]千山鸟飞绝【splay】
  14. 千呼万唤始出来-YYC松鼠聚合系统搭建教程,理论上可对接一切API
  15. rtx服务器限制文件传输,rtx 服务器 文件传输 配置
  16. 图灵学院Java开发笔记
  17. 手机屏幕 高宽有哪些_苹果手机屏幕有哪些尺寸?
  18. 聚类算法(4)--Hierarchical clustering层次聚类
  19. django批量修改table_Django 使用 modelformset 组件批量修改表单数据
  20. 杰理之Dongle【篇】

热门文章

  1. 30ea什么意思_阿玛尼ga是什么意思、和ea的区别
  2. 【软件版本】软件版本GA、RC、Beta、Alpha等的详细解释和含义
  3. 全球打工人的抗争!谷歌员工希望更公平,国内只求告别996
  4. Hopping Rabbit---牛客
  5. 服务器4通道内存性能测评,【华擎X99评测】两代多频对比 看DDR3/DDR4内存性能实测(全文)_华擎 X99-WS_主板评测-中关村在线...
  6. mysql rman_利用RMAN把ORACLE10G64位降级为32位_MySQL
  7. 机器人感知与规划笔记 (2) - 传感器(Sensor)类型及其限制
  8. 【历史上的今天】11 月 21 日:第一个阿帕网连接建立;乐视网成立;爱迪生发明留声机
  9. 第十节 项目风险、收尾、知识产权管理
  10. 什么是 NLP (自然语言处理)