zoukankan      html  css  js  c++  java
  • Flask 基础组件(七):蓝图

    1 蓝图资源

    蓝图有自己的目录,它的所有资源都在其目录下。蓝图的资源目录是由创建Blueprint对象时传入的模块名”__name__”所在的位置决定的。同时,我们可以指定蓝图自己的模板目录和静态目录。比如我们创建蓝图时传入:

    admin_bp = Blueprint('admin', __name__,
                         template_folder='templates',
                         static_folder='static')

    这样,该蓝图的模板目录就在”admin/templates”下,而静态目录就在”admin/static”下。当然,其实默认值就是这两个位置,不指定也没关系。我们可以用蓝图对象的”root_path”属性获取其主资源路径,”open_resource()”方法访问主资源路径下的某个文件,比如:

    # 假设 current app 在路径 /home/bjhee/flask-app,
    #这个将会返回 /home/bjhee/flask-app/admin
    print admin_bp.root_path
    # 读取文件 /home/bjhee/flask-app/admin/files/info.txt
    with admin_bp.open_resource('files/info.txt') as f:
        info = f.read()
    print info

    2 使用蓝图可以分为四个步骤

    1. 创建一个蓝图的包,例如users,并在__init__.py文件中创建蓝图对象
    users=Blueprint('users',__name__)

          2.在这个蓝图目录下, 创建views.py文件,保存当前蓝图使用的视图函数

    @admin.route('/')
    def home():
        return 'user.home'

    3 在users/init.py中引入views.py中所有的视图函数

    from flask import Blueprint
    # 等同于原来在 manage.py里面的 app = Flask()
    users=Blueprint('users',__name__)
    
    from .views import *

    4 在主应用main.py文件中的app对象上注册这个users蓝图对象

    from users import users
    app.register_blueprint(users,url_prefix='/users')

    当这个应用启动后,通过/users/可以访问到蓝图中定义的视图函数

    3 运行机制

    • 蓝图是保存了一组将来可以在应用对象上执行的操作,注册路由就是一种操作
    • 当在app对象上调用 route 装饰器注册路由时,这个操作将修改对象的url_map路由表
    • 然而,蓝图对象根本没有路由表,当我们在蓝图对象上调用route装饰器注册路由时,它只是在内部的一个延迟操作记录列表defered_functions中添加了一个项
    • 当执行app对象的 register_blueprint() 方法时,应用对象将从蓝图对象的 defered_functions 列表中取出每一项,并以自身作为参数执行该匿名函数,即调用应用对象的 add_url_rule() 方法,这将真正的修改应用对象的usr_map路由表

    4 蓝图用于为应用提供目录划分:

    小型应用程序文件结构

    / yourapplication
         / yourapplication
             / __init__.py
             / views
                 __init__.py
                 admin.py
                 frontend.py
             / static
                 / style.css
             / templates
                 layout.html
                 index.html
                 login.html
                 ...
     
    大型应用程序文件结构
    / yourapplication
         __init__.py
         / apps
             __init__.py
             / frontend
                 __init__.py
                 views.py
                 / static
                     style.css
                 / templates
                     index.html
                     about.html
                     ...
             / admin
                 __init__.py
                 views.py
                 / static
                     style.css
                 / templates
                     list_items.html
                     show_item.html
                     ...
     

    其他:

      • 蓝图URL前缀:xxx = Blueprint('account', __name__,url_prefix='/xxx')
      • 蓝图子域名:xxx = Blueprint('account', __name__,subdomain='admin')
        # 前提需要给配置SERVER_NAME: app.config['SERVER_NAME'] = 'wupeiqi.com:5000'
        # 访问时:admin.wupeiqi.com:5000/login.html

     



  • 相关阅读:
    哈夫曼编码
    20182330《程序设计与设计结构》 第九周学习总结
    20182330 2019-2020-1 《数据结构与面向对象程序设计》实验七报告
    20182330 2019-2020-1 《数据结构与面向对象程序设计》实验八报告
    20182330《程序设计与设计结构》 第八周学习总结
    20182330《程序设计与设计结构》 第七周学习总结
    20182330 2019-2020-1 《数据结构与面向对象程序设计》实验六报告
    20182326 2018-2019-1《程序设计与数据结构》课程总结
    20182326 2019-2020-1 《数据结构与面向对象程序设计》实验九报告
    团队作业——学习心得
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12814265.html
Copyright © 2011-2022 走看看