ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【flask进阶学习笔记】4. 蓝图及子域名

2019-08-20 22:08:35  阅读:338  来源: 互联网

标签:profile 进阶 flask 蓝图 及子 url bp user cms


原文链接:https://www.cnblogs.com/sellsa/p/9248833.html

1. 蓝图

1.1 蓝图的基本使用

之前我们写的代码都是集中在一个主程序文件里面。这样不利于分层解耦和维护。
蓝图的作用就是让我们的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')

在这里插入图片描述
在这里插入图片描述

1.2 模板文件寻找规则

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

@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里面没有,才会去我们自己定义的目录去找。

1.3 静态文件寻找规则

我们之前知道加载静态文件是用: 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='....')

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

1.4 蓝图中url反转的注意事项

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

url_for('user.profile')

2. 子域名

什么是子域名,我们的后台管理系统, 比如cms.heboan.com。
配置子域名需要用到蓝图技术:

我现在buleprints下面创建一个cms.py 蓝图

from flask import Blueprint


cms_bp = Blueprint('cms', __name__, subdomain='cms')

@cms_bp.route('/')
def index():
    return 'cms page'

在主程序my_flask.py注册该蓝图

..
from blueprints.cms import cms_bp

...
app.register_blueprint(cms_bp)

编辑配置文件config.py添加如下一行

SERVER_NAME = 'heboan.com:5000'

编辑hosts 文件(C:\Windows\System32\drivers\etc\hosts)

#添加此行
127.0.0.1   heboan.com  cms.heboan.com

在这里插入图片描述

标签:profile,进阶,flask,蓝图,及子,url,bp,user,cms
来源: https://blog.csdn.net/ljb0077/article/details/99888086

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有