首先,我对蓝图的理解相对通俗,就是觉得蓝图对于视图方法模块化、大项目协同开发过程中的一个很好的工具.

1.下图是我们通常情况下使用的项目组织结构

看一下视图方法:

#views.py 1 from app import app2 3 4 @app.route('/user/index')5 def index():6     return 'user_index'7 8 @app.route('/user/show')9 def show():
10     return 'user_show'
11
12 @app.route('/user/add')
13 def add():
14     return 'user_add'
15
16 @app.route('/admin/index')
17 def adminindex():
18     return 'admin_index'
19
20 @app.route('/admin/show')
21 def adminshow():
22     return 'admin_show'
23
24 @app.route('/admin/add')
25 def adminadd():
26     return 'admin_add'

#从视图方法中,我们看到有6个视图,分别对应admin,user两个不同用户的3个功能index,add,show.
这样写显然没问题,但是明显与python提倡的模块化,优雅的代码特点相违背,即不是很python的python代码.

让我们在这里假想两个问题:1.如果admin和user不止只有3个功能呢,比如好几百个,导致views的代码量已经达到了上万行?2.如果我们有多个同事分工开发admin,user和其它可能的模块呢,都同时往一个views里写代码吗,在做版本控制时,提交过程中频繁出现提交冲突了怎么办?3.加入我们要抛弃admin或者user功能块时怎么办,要一一手动删除所有admin或是user相关的代码吗,这样当然可以,但是会不会太low呢?

当然根据Pythonic特点,我们肯定希望尽可能的把代码尽量的模块化,让我们的代码看起来更加的优雅和顺畅,这个时候flask.Blueprint(蓝图)就派上用场了

什么是蓝图?

一个蓝图定义了可用于单个应用的视图,模板,静态文件等等的集合。

我什么时候会用到蓝图?

蓝图的杀手锏是将你的应用组织成不同的组件,比如把这里的admin,user相关的视图方法分为两个组件,一个是admin组件,一个是user组件.这时我们可以

创建两个蓝图实现这两个独立的组件.

 2.我们如何使用蓝本将上述的视图方法看上去更加pythonic呢?

由于上面的例子中只有两个组件(模块)admin,user,我们可以创建名为admin.py和user.py的两个文件,分别在里面创建两个蓝图的实例对象admin,user.

直接上代码:

#admin.py

#admin.py
from flask import Blueprint,render_template, requestadmin = Blueprint('admin',__name__)@admin.route('/index')
def index():return render_template('admin/index.html')@admin.route('/add')
def add():return 'admin_add'@admin.route('/show')
def show():return 'admin_show'

#要想创建一个蓝图对象,你需要import flask.Blueprint()类并用参数nameimport_name初始化。import_name通常用__name__,一个表示当前模块的特殊的Python变量,作为import_name的取值。

#user.py

from flask import Blueprint, render_template, redirectuser = Blueprint('user',__name__)@user.route('/index')
def index():return render_template('user/index.html')@user.route('/add')
def add():return 'user_add'@user.route('/show')
def show():return 'user_show'

好了,视图函数已经分开了,我们如何使用它们的呢?再来看一下我们的views.py变成了什么样吧?

#views.py

from app import app
from .admin import admin
from .user import user
#这里分别给app注册了两个蓝图admin,user#参数url_prefix='/xxx'的意思是设置request.url中的url前缀,#即当request.url是以/admin或者/user的情况下才会通过注册的蓝图的视图方法处理请求并返回app.register_blueprint(admin,url_prefix='/admin')
app.register_blueprint(user, url_prefix='/user')

#现在我们的views是否已经变得很简单了呢?顺便回答第三个问题,如果想弃用某一个组件(模块)我们只需要相对应的注释掉给app注册蓝图的行即可.#细心的伙伴还可以发现,在views.py中在使用默认endpoint的前提下,我们是没有办法使用同一个视图方法名的(当然我们也不建议在同一个文件中有两个视图方法名相同,#尽管指向他们的request.url不同),但是使用了蓝图之后我们就可以在不同模块中使用相同的方法名了,例如add,show..3.到此我们就可以通过浏览器测试我们的程序

4.附上使用蓝图后的项目组织结构

当然如果项目不大的话就没有什么必要使用蓝图了,甚至我们可以把除了所有css,js,html的代码都写到一个文件中去,这里我们不在举例,说明.

flask蓝图的使用相关推荐

  1. Flask 蓝图,数据库链接

    蓝图 使用场景 如果代码非常多,要进行归类.不同的功能放在不同的文件,把相关的视图函数也放进去. 蓝图也就是对flask的目录结构进行分配(应用于小,中型的程序) 当然对于大型项目也可以通过   ur ...

  2. 【Python 实战基础】Flask 蓝图 Blueprint 怎么用以及怎么集成 Bootstrap

    目录 一.简介 二.主要知识点 三.菜鸟实战 1.创建蓝图 2.注册蓝图 3.蓝图运行结果 ​4.下载和引入 Bootstrap 5.代码目录 6.Bootstrap 运行结果 一.简介 Flask ...

  3. Flask 蓝图机制及应用

    我们都知道 flask 是一个轻量级的 web 框架,相对于其他同类型框架更为灵活.轻便.安全且容易上手.开发者可以随意编写自己想要的项目结构,同时还有很多的第三方库供君选择.但是灵活的同时也带来了相 ...

  4. flask 蓝图 使用蓝图,增删改查用户

    Flask 中的  蓝图 蓝图,听起来就是一个很宏伟的东西 在Flask中的蓝图 blueprint 也是非常宏伟的 它的作用就是将 功能 与 主服务 分开怎么理解呢? 比如说,你有一个客户管理系统, ...

  5. Flask蓝图使用的方法

    之前我们已经通过代码了解了一些Flask基本的用法,现在出现一个问题,我们要做的功能越来越多,路由是不是都要放在启动类中呢?例如我们在不同的文件都定义了一些路由,如果想要访问他们,是不是要开启很多个不 ...

  6. Flask 蓝图 Blueprint

    为什么需要蓝图? 我们在使用Flask框架,是从写单个文件,执行hello world开始的.我们在这单个文件中可以定义路由.视图函数.定义模型等等.但这显然存在一个问题:随着业务代码的增加,将所有代 ...

  7. Day4 --- Flask 蓝图与Rest-ful

    蓝图 蓝图的使用步骤分为三步: 1.创建一个蓝图对象 2.在这个蓝图对象上进行操作, 注册路由, 指定静态文件夹, 注册模板过滤器 3.在应用对象上注册蓝图对象 开始创建 蓝图的实现 创建一个app. ...

  8. flask + 蓝图 用 sqlalchemy 对 mysql 进行 增删查改 的 demo

    main.py import uuid # UUID: 通用唯一标识符 # from flask import Flask from flask import Flask, request, json ...

  9. Flask中路由系统以及蓝图的使用

    一.Flask的路由系统 1.@app.route()装饰器中的参数 methods:当前URL地址,允许访问的请求方式 @app.route("/info", methods=[ ...

最新文章

  1. c#中的非托管资源释放 (Finalize和Dispose)
  2. Spring 框架中有哪些不同类型的事件?
  3. Earliest PEP Algorithm Principles
  4. Hystrix面试 - 基于本地缓存的 fallback 降级机制
  5. 16. GD32F103C8T6入门教程-adc 使用教程2-dma+连续扫描方式采集数据
  6. Windows安全不能靠本地管理员权限
  7. 恒定湿热试验条件及标准-环境试验中的湿热试验报告
  8. 目标客户画像_做营销时,如何做好目标用户群体画像?
  9. 直播源 直播地址 测试地址 http rtsp rtmp hls 短视频测试地址
  10. 基于Springboot和Mybatis的文件上传与下载
  11. 互联网+双“高新”时代
  12. LeetCode知识点总结 - 347
  13. ROS入门-ROS的安装及编写简单的节点talker和listener
  14. C++期末考试选择题题库100道
  15. OpenStack 一键安装
  16. 【分享-一键在线抠图】在线免费去除图片背景
  17. Windows权限维持之建立影子账号、powershell配置文件后门、Monitor权限维持
  18. 微信、支付宝先后发布声明!
  19. 客流数据分析如何助力门店业绩提升
  20. CAD文件解析后按照特定规则将图形切割

热门文章

  1. Web3DGame之路,Babylonjs 和TypeScript学习笔记(二)
  2. Android抽象布局——include、merge 、ViewStub
  3. solaris迅速查找手册
  4. NFV — 高性能 NFVI
  5. 互联网协议 — IPSec 安全隧道协议
  6. 架构师之路 — 数据库设计 — 关系型数据库应用程序设计
  7. Openstack Nova 源码分析 — RPC 远程调用过程
  8. VMware 接入 Openstack — 使用 Openstack 创建 vCenter 虚拟机
  9. Linux_进程管理计划任务
  10. NanoPi NEO Air使用十四:FrameBuffer的理解和使用