蓝图的基本使用

之前我们写的代码都是集中在一个主程序文件里面。这样不利于分层解耦和维护。
蓝图的作用就是让我们的flask项目更加模块化结构更加清晰,可以将相同模块的视图函数放在同一个蓝图下,同一个文件中,方便管理
比如,设计的网站有如下几个模块
  读书 ---book
  电影 ---movie
  新闻 ---news
  用户 ---user

我们新建了一个Python Package命名为blueprints,然后在里面新建book.py, movie.py, news.py, user.py

这里以user.py为例演示,其他模块同理

from flask import Blueprint

#我们发现这里和主程序那里差不多,只是这里多了一个参数来表示该蓝图的名字
user_bp = Blueprint('user', __name__) @user_bp.route('/profile/')
def profile():
return '个人中心' @user_bp.route('/settings/')
def settings():
return '用户设置'

user.py的蓝图配置好了,我们需要到主程序my_flask.py那里注册才可以

...
from blueprints.user import user_bp ... app.register_blueprint(user_bp)

我们注意到访问的url是: http://127.0.0.1:5000/profile/ 和http://127.0.0.1:5000/settings/

如果我们想在url加上前缀,变成http://127.0.0.1:5000/user/profile这种,我们只需要在配置蓝图的时候加上url_prefix参数

user_bp = Blueprint('user', __name__, url_prefix='/user')

模板文件寻找规则

在实际开发中我们使用蓝图也是渲染模板

@user_bp.route('/profile/')
def profile():
return render_template('profile.html') #这个profile.html的位置也会从templates目录里面去找

我们也可以把模板放到其他位置,比如,我在blueprint下创建个目录user,然后把模板profile.html当到user目录下,那么就需要使用template_folder参数

#这里指定了这个蓝图模板的查找路径,是相对于本蓝图的所在的路径,也可以使用绝对路径
user_bp = Blueprint('user', __name__, url_prefix='/user', template_folder='user') @user_bp.route('/profile/')
def profile():
return render_template('profile.html')

一旦我们添加了template_folder参数,查找模板文件还是会先去templates查找,如果templates里面没有,才会去我们自己定义的目录去找

静态文件寻找规则

我们之前知道加载静态文件是用: url_for('static', filename='xxxxx'), 这种情况下,flask会直接从项目下面的static目录去查找。在蓝图中也是这样。
那么我们也可以在蓝图中把静态目录位置改到其他地方,如:添加个static_folder参数

user_bp = Blueprint('user', __name__, url_prefix='/user', static_folder='xxxxx')

然后我们在模板中加载的时候需要指定蓝图的名字

url_for('user.static', filename='....')

其实在实际开发过程中我们没必要改变模板和静态文件的位置,使用默认指定的就可以了,这里只是作为知识点讲解

在没有使用蓝图的时候,我们使用url_for反转的时候,直接指定endpoint就可以了,但是有了蓝图之后,我们还必须加上蓝图的名字,比如:

url_for('user.profile')

11、Flask实战第11天:蓝图的更多相关文章

  1. Asp.Net Core 2.0 项目实战(11) 基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级

    1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...

  2. Flask实战-留言板-安装虚拟环境、使用包组织代码

    Flask实战 留言板 创建项目目录messageboard,从GreyLi的代码中把Pipfile和Pipfile.lock文件拷贝过来,这两个文件中定义了虚拟环境中需要安装的包的信息和位置,进入m ...

  3. PSU 离11.2.0.3.0 -&gt; 11.2.0.3.11 如果解决冲突的整个

    Oracle rdbms 扑灭psu离11.2.0.3.0升级到11.2.0.3.11 参考patch :18522512 停止应用,停止听音乐并DB,将db的oracle_home在下面OPatch ...

  4. Oracle DataGuard 升级 [11.2.0.1 -> 11.2.0.4]

    Oracle DataGuard 升级 [11.2.0.1 -> 11.2.0.4] Primary: 11.2.0.1 单机,Site A. Standby: 11.2.0.1 单机,Site ...

  5. error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler op

    caffe c++11编译问题 问题:error: #error This file requires compiler and library support for the ISO C++ 201 ...

  6. ssh The authenticity of host '10.11.26.2 (10.11.26.2)' can't be established

    The authenticity of host '10.11.26.2 (10.11.26.2)' can't be established. ECDSA key fingerprint is SH ...

  7. 北京Uber优步司机奖励政策(11月23日~11月29日)

    用户组:人民优步"关羽组"(适用于11月23日-11月29日)奖励政策: 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最 ...

  8. 北京Uber优步司机奖励政策(11月16日~11月22日)

    用户组:人民优步“关羽组”(适用于11月16日-11月22日)奖励政策: 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/ ...

  9. 北京Uber优步司机奖励政策(11月9日~11月15日)

    用户组:人民优步“关羽组”(适用于11月9日-11月15日)奖励政策: 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月 ...

随机推荐

  1. oracle大数据匹配处理C#

    忙碌了几天写出来的oracle存储过程在作业中执行. 写的oracle存储过程如果有什么不好的地方大家指点指点. oracle存储过程其中使用到游标嵌套.if.if嵌套.数据插入表.select插入表 ...

  2. CSS3不遥远,几个特性你要知道

    CSS是众所周知且应用广泛的网站样式语言,在它的版本三(CSS3)计划中,新增了一些能够节省时间的特性.尽管只有当前最新了浏览器版本才能支持这些 效果,但了解它们还是必须且很有趣味性的.CSS3中的5 ...

  3. The 13th Zhejiang Provincial Collegiate Programming Contest - C

    Defuse the Bomb Time Limit: 2 Seconds      Memory Limit: 65536 KB The bomb is about to explode! Plea ...

  4. [poj 2104]主席树+静态区间第k大

    题目链接:http://poj.org/problem?id=2104 主席树入门题目,主席树其实就是可持久化权值线段树,rt[i]维护了前i个数中第i大(小)的数出现次数的信息,通过查询两棵树的差即 ...

  5. Codeforces Round #526 (Div. 2) E. The Fair Nut and Strings

    E. The Fair Nut and Strings 题目链接:https://codeforces.com/contest/1084/problem/E 题意: 输入n,k,k代表一共有长度为n的 ...

  6. HDU1272:小希的迷宫(并查集)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  7. HDU1859 最小长方形 (水

    最小长方形 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  8. Android4.4中WebView无法显示图片解决方案

    在Android4.4之前我们在使用WebView时为了提高加载速度我设置了(myWebView.getSettings().setBlockNetworkImage(true);//图片加载放在最后 ...

  9. BigDecimal精度问题

    介绍 1.商业计算使用BigDecimal. 2.使用参数为String的构造函数. 3.BigDecimal都是不可变的,每一步的运算时,都会产生一个新的对象.所以在做加减乘除后千万要保存操作后的值 ...

  10. 随机洗牌算法Knuth Shuffle和错排公式

    Knuth随机洗牌算法:譬如现在有54张牌,如何洗牌才能保证随机性.可以这么考虑,从最末尾一张牌开始洗,对于每一张牌,编号在该牌前面的牌中任意一张选一张和当前牌进行交换,直至洗到第一张牌为止.参考代码 ...