11、Flask实战第11天:蓝图
蓝图的基本使用
之前我们写的代码都是集中在一个主程序文件里面。这样不利于分层解耦和维护。
蓝图的作用就是让我们的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天:蓝图的更多相关文章
- Asp.Net Core 2.0 项目实战(11) 基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级
1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...
- Flask实战-留言板-安装虚拟环境、使用包组织代码
Flask实战 留言板 创建项目目录messageboard,从GreyLi的代码中把Pipfile和Pipfile.lock文件拷贝过来,这两个文件中定义了虚拟环境中需要安装的包的信息和位置,进入m ...
- PSU 离11.2.0.3.0 -> 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 ...
- 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 ...
- 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 ...
- 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 ...
- 北京Uber优步司机奖励政策(11月23日~11月29日)
用户组:人民优步"关羽组"(适用于11月23日-11月29日)奖励政策: 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最 ...
- 北京Uber优步司机奖励政策(11月16日~11月22日)
用户组:人民优步“关羽组”(适用于11月16日-11月22日)奖励政策: 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/ ...
- 北京Uber优步司机奖励政策(11月9日~11月15日)
用户组:人民优步“关羽组”(适用于11月9日-11月15日)奖励政策: 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月 ...
随机推荐
- nodejs 喜欢报cannot find module .....的简单解决方案
在安装nodejs后使用命令npm install <package_name>一直喜欢报cannot find module........ 因为我之前在我的电脑上安装过nodejs,当 ...
- 播放video
<html> <head> <title> four in one vedio</title> <style type="text/cs ...
- BZOJ 3994: [SDOI2015]约数个数和
3994: [SDOI2015]约数个数和 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 898 Solved: 619[Submit][Statu ...
- HDU1003MAX SUM (动态规划求最大子序列的和)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- memcached启动脚本(class练习)
说明:使用类的方式编写程序启动脚本(memcached) import time import os from subprocess import Popen,PIPE class Process(o ...
- linux下bus、devices和platform的基础模型 【转】
转自:http://blog.chinaunix.net/uid-20672257-id-3147337.html 一.kobject的定义:kobject是Linux2.6引入的设备管理机制,在内核 ...
- servlet(4) - servletAPI - 小易Java笔记
Servlet规范核心类图 1.请求和响应对象 ==> HTTP协议包含请求和响应部分. ==> HttpServletRequest就代表着请求部分 ==> HttpServlet ...
- servlet(3) - servlet知识点 - 小易Java笔记
1.servlet的生命周期 (1)容器最终要调用service方法为客户进行服务.(此处“容器”指java运行的环境,tomcat是jsp/servlet的容器) ==> 在内存中一个Serv ...
- mysql内连接、左连接、右连接举例说明
如下: CREATE TABLE tb ( id INT PRIMARY KEY, NAME VARCHAR (20) ) ; CREATE TABLE ta ( id INT PRIMARY KEY ...
- 4.flask数据库
1.安装MySQL 直接去下载即可,如果是windows建可以下载msi,一路next即可.我已经安装过了,这里就不再演示了. 最后使用Navicat连接测试一下,我这里是没有问题的 2.SQLAlc ...