Flask 第五话之模块化 -- 蓝图

一、蓝图定义

如果我们将所有的Flask的请求方法都写在同一个文件下的话,非常的不便于我们的代码的管理和后期的功能代码的添加,简单来说蓝图就是实现一个模块化。

二、基本使用

1.新建目录views,在views文件夹中创建模块user,user代码如下

# 第一步:导入蓝图
from flask import Blueprint

# 第二步:实例化user_bt蓝图类   url_prefix ==> 指定url前缀
user_bt = Blueprint('user',__name__,url_prefix='/u')

# 第三步:写视图函数
@user_bt.route('/profile/')
def Profile():
    return '个人中心'

@user_bt.route('/settings/')
def settings():
    return '设置页面'

2.在app中注册蓝图

from flask import Flask

"""
用户模块 ===》user_bt
新闻模块
"""

# 第四步:导入模块
from view import user,news
# 第五步:注册蓝图到app中
app.register_blueprint(user.user_bt)
app.register_blueprint(news.news_bt)


@app.route('/')
def index():
    return '首页'


if __name__ == '__main__':
    app.run()

 3.模板路径

# 第二步:实例化user_bt蓝图类   url_prefix ==> 指定url前缀
user_bt = Blueprint(
    'user',
    __name__,
    url_prefix='/u',
    # 指定模板路径:默认在当前user.py文件路径
    # 1、如果不设置参数则找template文件夹
    # 2、如果相同名字的html在template和指定路径中同时存在,则以tempalte优先
    template_folder='../page/'
)

# 第三步:写视图函数
@user_bt.route('/profile/')
def Profile():
    return render_template('profile.html')

 三、蓝图中静态文件的查找规则

* 在模板文件中,加载静态文件,如果使用url_for('static'),那么就智慧在app指定的静态文件夹中查找静态文件

<link rel="stylesheet" href="{{  url_for('static',filename='css/profile.css')  }}">

* 如果加载静态文件的时候,指定了蓝图名字,比如url_for('userss.static'),那么就会到这个蓝图指定的静态文件中查找

<link rel="stylesheet" href="{{  url_for('userss.static',filename='css/profile.css')  }}">

 四、url_for反转蓝图中的视图函数url:

* 如果使用蓝图,那么以后想要反转蓝图中的视图函数为url,那么就应该在使用url_for的时候指定这个蓝图。比如'news.news_list'。否则久找不到这个endpoint。在版本中的url_for同样也是要满足这个条件,就是指定蓝图的名字
* 即使在蓝图中反转视图函数,也要指定蓝图的名字。

 五、蓝图实现子域名:

1.使用蓝图技术
2.在创建蓝图对象的时候,需要传一个'subdomain'参数

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

3.需要在主app中,配置app.config的SERVER_NAME参数。

app.config['SERVER_NAME'] = 'baidu.com:5000'

注:本地测试的时候可以修改hosts文件将IP:127.0.0.1对应自定义域名

原文地址:https://www.cnblogs.com/lee-xingxing/p/12365101.html