蓝图介绍

一个项目中,有不同的模块,但是只有一个入口,程序入口可以随便取名,一般叫做,app.py或者manage.py。当我们写一个程序,当然可以在一个文件中写完,但是有一定规模的项目,我们肯定不会这样做,在开发中,讲究的是低耦合高内聚,所以对不同功能,我们会分成不同的模块,每个模块相互独立,但是都和app有关系。Flask中蓝图能够让我们以模块化的方式对项目进行管理。

例子中了解蓝图使用

(我想了想如何去写蓝图,想来想去,还是跟着思路写小项目,最好说明)

这是一个没有模块化的小项目

from flask import Flask

app = Flask(__name__)

@app.route('/user')
def user():
return "这是用户模块" @app.route('/order')
def order():
return "这是订单模块" if __name__ == '__main__':
app.run()

这个是上面例子中对应的url_map

理想的程序入口应该只用来启动项目,而其他的则要抽离到对应的模块中。一般会创建一个python package包来专门写特定的模块。包中有一个init文件,一个包的初始化文件,里面的东西越少越好,

所以,一般在包中创建一个叫做views.py的视图文件。

将用户模块和订单模块分别放到对应的views.py文件中。

会发现app报了错误

然后通过from manage import app 导入包。

运行之后,会发现路由表中找不到这两个路由路径了。

原因是启动文件manage.py根本不知道有这两个文件。

如果在启动文件的manage.py中通过from ** import ** 来导入这两个模块的视图文件,

会发现,路由表中还是没有对应的路径

这个时候就用到了蓝图。

在views视图中,不用app来注册路由,用蓝图来注册

一般情况下是一个模块,一个蓝图

# 导入蓝图
from flask import Blueprint # 创建蓝图对象
user_blue = Blueprint("user") # 第一个参数是蓝图的别名,第二个是import name,和a注册app一样,直接写__name__,其他参数目前用不到先不说 # 用蓝图注册路由
@user_blue.route("user")
def user():
return "这是用户模块"

上面的做法不是很好,因为views应该就做视图函数,没有必要把创建蓝图对象的操作放里面,所以将导入蓝图和创建蓝图对象的操作放到python package包中的__init__.py的初始化文件中。

然后再在views视图文件中通过from . import user_blue来导入对象

运行之后发现,还是找不到这个路径,因为路由注册在蓝图里面,并没有到让app知道,所以将这个蓝图注册到app中就可以了

首先通过from import user_blue导入用户的蓝图对象,然后

app.register_blueprint(user_blue)

这样就将蓝图注册到app中了

这样做了,会发现还是url_map中还是没有,因为模块中的views并没有和任何文件建立关联

所以将views视图通过from users import views,再引入到启动文件,也就是manage.py中再运行。

这样就会发现url_map中有了这个路由的对应关系了。

将views引入启动文件中,并不是最好的,最好是将引入views的操作也放到模块的__init__的初始化文件中

问题

当两个模块中有一样的路径时访问会发生什么?

当url中写入这个路径的时候,会根据url_map表从上到下的顺序,访问第一个对应的模块中对应的视图函数。那Flask的路由岂不是很垃圾?

事实上,在Flask的注册蓝图对象的时候可以传入一个参数:url_prefix 。具体使用是:

user_blue = Blueprint('user', __name__, url_prefix='/users')

红色笔表示新的进入视图的路径

蓝笔画的order.表示是别名是order下的order_info视图函数。

通过这种形式路径就得到了唯一的区分。

Flask——蓝图的更多相关文章

  1. Flask 蓝图(Blueprint)

    蓝图使用起来就像应用当中的子应用一样,可以有自己的模板,静态目录,有自己的视图函数和URL规则,蓝图之间互相不影响.但是它们又属于应用中,可以共享应用的配置.对于大型应用来说,我们可以通过添加蓝图来扩 ...

  2. flask 蓝图

    转自:http://spacewander.github.io/explore-flask-zh/7-blueprints.html 蓝图 什么是蓝图? 一个蓝图定义了可用于单个应用的视图,模板,静态 ...

  3. Flask蓝图目录、Flask-SQLAlchemy、Flask-Script、Flask-Migrate

    一.Flask蓝图目录 我们之前写的Flask项目都是自己组织的目录结构,其实Flask官方有其推荐的目录结构,以下就是一个符合官方推荐的Flask小型应用的项目结构目录示例,如下: 如图,这就是我们 ...

  4. Flask蓝图的增删改查

    怎样用flask蓝图来实现增删改查呢?请看下面的内容 这是我们的目录结构 从图中可以看出每一个功能都有一个各自的文件夹 首先我们要自己先来创建一个数据,在Flask_data.py中写入如下内容: S ...

  5. Flask蓝图基本使用

    Flask蓝图基本使用 Flask通过使用蓝图将视图函数模块化,使应用显得更加规整 比如我们的应用的视图函数包括用户相关和文章相关,那么我们可以通过建立两个py文件分别存储两类视图函数 user.py ...

  6. Flask蓝图遇到的问题

    欢迎加入python学习交流群 667279387 最近在使用flask开发一个业余学习项目,由于之前都是"小打小闹",整个程序都是放在一个文件夹里面的,也没有注意这个问题.这次项 ...

  7. Flask蓝图Blueprint和特殊装饰器

    Flask 中的 蓝图 Blueprint 不能被run的flask实例:相当于django中的app01 应用 蓝图作用:功能隔离 路由隔离 Blueprint就是 一个不能run的flask 蓝图 ...

  8. Flask 蓝图进行路由分发.md

    Flask 蓝图进行路由分发 Flask虽然说是一个轻型web框架,但也总不能用一个py文件写完全部view吧,所以我们要把路由分到不同的py文件中.这就需要用到蓝图了. 一 创建一个py文件 用于处 ...

  9. Flask 蓝图(Blueprint)使用方式解析

    Flask蓝图提供了模块化管理程序路由的功能,使程序结构清晰.简单易懂.下面分析蓝图的使用方法 假如说我们要为某所学校的每个人建立一份档案,一个很自然的优化方式就是这些档案如果能分类管理,就是说假如分 ...

  10. 测试平台系列(4) 使用Flask蓝图(blueprint)

    使用Flask蓝图(blueprint) 回顾 先来看一下上一篇的作业吧,使用「logbook」的时候,遇到了时区不对的情况.那么我们怎么去解决这个问题呢? 实际上logbook默认采用的是世界标准时 ...

随机推荐

  1. 51nod 1067【简单博弈】

    卧槽,第一次自己推推推做出来的... 对于1,那么就是A取完就好 --A 对于2,只能是A拿一个 --B 对于3和4,都是A拿完 --A 对于5,靠向2,A取3,B只能1 --A 对于6,A取一个的话 ...

  2. [Xcode 实际操作]九、实用进阶-(6)在Swift文件中调用Object-C的类和方法

    目录:[Swift]Xcode实际操作 本文将演示在Swift文件中调用Object-C的类和方法. 在项目文件夹[DemoApp]上点击鼠标右键 ->[New File]创建一个Object- ...

  3. bzoj1339/1163:[Baltic2008]Mafia

    传送门 最小割,割点,模板... 代码: #include<cstdio> #include<iostream> #include<algorithm> #incl ...

  4. bzoj1458士兵占领

    传送门 和上一题差不多,每行和每列分别看做一个点,障碍点坐标的行和列就不建边,再按照有源汇上下界建图就好了,唯一的区别就是这个题求的是最小流 这个题的数据好水呢,建错图也能A呢 #include< ...

  5. 后端开发福音!GitHub上15W+的后台控制面板!

    Web 开发中几乎的平台都需要一个后台管理,但是从零开发一套后台控制面板并不容易,幸运的是有很多开源免费的后台控制面板可以给开发者使用,那么有哪些优秀的开源免费的控制面板呢?我在 Github 上收集 ...

  6. jq解析json文件

    $.ajaxSettings.async = false;//同步还是异步 $.getJSON(URL,function(data){ //成功后执行 })

  7. AKOJ-2010-魔法石

    链接:https://oj.ahstu.cc/JudgeOnline/problem.php?id=2010 题意: Vyoung最近收集到一大批魔法石,这些魔法石有两种特性,攻击和防守,不同特性的两 ...

  8. Spring Security LDAP简介

    1.概述 在本快速教程中,我们将学习如何设置Spring Security LDAP. 在我们开始之前,了解一下LDAP是什么? - 它代表轻量级目录访问协议.它是一种开放的,与供应商无关的协议,用于 ...

  9. Mysql优化配置

    Mysql配置优化 一.环境介绍 Mysql版本:5.5.27 二.优化内容 字段 介绍 推荐值 skip-locking 避免MySQL的外部锁定,减少出错几率增强稳定性 back_log MySQ ...

  10. CF1059B Forgery

    思路: 若某个位置是‘.’,说明不能在周围的8个位置下笔.在所有可以下笔的位置填充一次,看能否“包含”需要的图案即可. 实现: #include <iostream> using name ...