11Flask实战第11天:视图使用装饰器

Posted sellsa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了11Flask实战第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)

 

以上是关于11Flask实战第11天:视图使用装饰器的主要内容,如果未能解决你的问题,请参考以下文章

python 学习第11天

python全栈脱产第11天

Flask中间件 -- 2019-08-11 19:14:55

Flask学习第6天:app.add_url_rule调用路由

11.3

Flask实战第6天:视图函数Response返回值