Flask学习之旅——3 视图高级
前言
- 本文为《知了传课—— 视图高级》的学习笔记。
蓝图
为什么使用蓝图?
- 当项目比较大或者代码比较多的时候,让所有的
url
和视图函数放在同一个文件夹里,这样的结构显然不太合理。 - 蓝图可以让我们的
url
和视图函数放在不同的文件里,使我们的结构更加的合理。 - 使用蓝图的好处:方便代码的维护,开发项目进行分工合作。
蓝图的使用
Blueprint
-
在使用蓝图时,我们需要用到
Blueprint
,这是一个存储视图方法的容器。 -
Blueprint
具有如下属性:-
一个项目可以具有多个
Blueprint
-
可以将一个
Blueprin
t注册到任何一个未使用的的URL比如"/"、"/sample/" 或者子域名 -
Blueprint
可以单独具有自己的模板、静态文件或者其它的通过操作方法,它并不是必须要实现应用的视图和函数
-
-
创建蓝图(book.py)
from flask import Blueprint # url_prefix: 127.0.0.1:5000/book bp = Blueprint("book",__name__,url_prefix="/book") @bp.route('/list') ###对应的地址为:127.0.0.1:5000/book/list def book_list(): return "图书列表"
-
引用蓝图(app.py)
from apps.book import bp as book_bp #引入book.py 里的 bp,为了区分重命名为 book_bp app = Flask(__name__) app.register_blueprint(book_bp)
使用静态文件
-
在默认情况下,
Flask
会在项目的static
文件夹中寻找静态文件。 -
在初始化蓝图的时候,
Blueprint
这个构造函数,有一个参数static_folder
可以指定静态文件的路径,路径可以是一个相对于蓝图的路径,也可以是绝对路径,如:bp = Blueprint('book',__name__,url_prefix='/book',static_folder='static')
-
如果静态文件是在蓝图文件所在目录下,在模板中引用则需写
蓝图名.static
<link href="{{ url_for('book.static',filename='book.css') }}">
使用模板文件
-
在默认情况下,
Flask
会在项目的templates
文件夹中寻找模板文件。 -
在构造函数
Blueprint
中有一个template_folder
参数可以设置模板的路径bp = Blueprint('book',__name__,url_prefix='/book',template_folder='templates')
- 注意:在使用以上代码的情况下,
Flask
还是会去先项目根目录下的templates
文件夹中查找模板文件,如果找到了就直接返回,如果没有找到,才会去蓝图文件所在的目录下的templates
文件夹中寻找。
- 注意:在使用以上代码的情况下,
-
默认情况下使用
from flask import Blueprint,render_template # url_prefix: 127.0.0.1:5000/book bp = Blueprint("book",__name__,url_prefix="/book") @bp.route('/list') ###对应的地址为:127.0.0.1:5000/book/list def book_list(): return render_template("book_list.html")
使用url_for
生成url
-
用
url_for
生成蓝图的url
,使用的格式是:蓝图名称+.+视图函数名称
。 -
例如:
url_for('book.book_list')