zoukankan      html  css  js  c++  java
  • 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对应自定义域名

  • 相关阅读:
    [CF1038F]Wrap Around[AC自动机+dp]
    [LOJ#6198]谢特[后缀数组+trie+并查集]
    [CF986F]Oppa Funcan Style Remastered[exgcd+同余最短路]
    [CF587F]Duff is Mad[AC自动机+根号分治+分块]
    [CF995F]Cowmpany Cowmpensation[树形dp+拉格朗日插值]
    [CF917D]Stranger Trees[矩阵树定理+解线性方程组]
    [CF1007D]Ants[2-SAT+树剖+线段树优化建图]
    [CF1007B]Pave the Parallelepiped[组合计数+状态压缩]
    [CF1010E]Store[kd-tree]
    【JZOJ3598】【CQOI2014】数三角形
  • 原文地址:https://www.cnblogs.com/lee-xingxing/p/12365101.html
Copyright © 2011-2022 走看看