zoukankan      html  css  js  c++  java
  • Flask 之一蓝图Blueprint详解

    一、蓝图概述

    蓝图:是flask提供的一种应用程序组织化的方法,类似的django的app,把不同功能分到不同文件,最后将这些文件汇总起来。

    本质:将不同处理功能的代码分开放,再将这些代码注册到蓝图上,最后将蓝图注册到应用程序。

    二、蓝图的理解和应用

    案例项目结构目录如下

    """
    ├── flask_blue
        ├── templates/            # 模版文件夹
        ├── static/               # 静态文件夹
        ├── apps/                 # app应用程序包
            ├── admin_app/        # 后台管理功能程序 - 
                   ├── __init__.py     
                └── admin.py      # 代码文件
            ├── login_app/        # 登陆功能程序
                ├── __init__.py       
                └── login.py      # 代码文件
        └── manage.py             # 主程序,类似Django的主路由
    """

    1、各个app下的程序代码如下

    admin.py文件代码如下

    from flask import Blueprint  #导入蓝图模块
    
    # Blueprint两个参数('蓝图名字',蓝图所在位置',url前缀),注意:url前缀对该蓝图下所有route都起作用
    admin_blue = Blueprint('admin',__name__,url_prefix='/admin') #创建一个蓝图
    
    @admin_blue.route('/') #该路由链接变成 /admin/
    def admin():
        return '后台管理界面'

    admin_app初始化文件__init__.py

    from apps.admin_app.admin import admin_blue
    # 方便使用,主程序使用时,就可以直接包名.admin_blue

    login.py文件如下:

    from flask import Blueprint  # 导入蓝图模块
    
    # Blueprint两个参数('蓝图名字',蓝图所在位置')
    login_blue = Blueprint('login', __name__)
    
    @login_blue.route('/login')
    def admin():
        return '登陆界面'

    2、apps包的初始文件__init__.py

    # -*-coding:utf-8 -*-
    from flask import Flask
    # 导入蓝图
    from apps.admin_app import admin_blue
    from apps.login_app import login_blue
    app = Flask(__name__)
    
    app.register_blueprint(admin_blue) #将蓝图注册到app中
    app.register_blueprint(login_blue)

    3、manage.py文件(主程序)

    # 从apps包中导入app
    from apps import app
    if __name__ == '__main__':
        app.run()

    在浏览器访问结果如下:

     三、蓝图的其他用法

    1、static_folder:设置蓝图的静态目录

    # 设置静态目录
    login_blue = Blueprint('login', __name__,static_folder='static_login')
    # 访问该蓝图的静态目录,就可以通过路径/static_login/静态目录下的文件名
    # 例子:http://127.0.0.1:5000/static_login/11.jpg
    # 如果蓝图注册的时候设置了url_prefix,则为 url_prefix/static_login/
    # 例子:http://127.0.0.1:5000/login/static_login/11.jpg

    2、更改静态目录的路径(url)名称

    login_blue = Blueprint('login', __name__,static_folder='static_login',static_url_path='/s')
    '''
     静态文件目录路径将有/static_login变成/s
     http://127.0.0.1:5000/static_login/11.jpg # 访问不了
     http://127.0.0.1:5000/s/11.jpg    # 可以访问
    
    '''

    3、设置蓝图自己的模板文件目录template_folder

    login_blue = Blueprint('login', __name__,template_folder='template')
    
    @login_blue.route('/login')
    def admin():
        return render_template('index.html')
    '''
    蓝图会从自己的template目录下找模板文件,找不到再去全局的templates目录中找
    '''

    注意:蓝图也有钩子函数(请求扩展),除了before_first_request这个装饰器没有外,其他基本跟app的一样

  • 相关阅读:
    标签的讲解
    属性分类
    LeetCode 003. 无重复字符的最长子串 双指针
    Leetcode 136. 只出现一次的数字 异或性质
    Leetcode 231. 2的幂 数学
    LeetCode 21. 合并两个有序链表
    象棋博弈资源
    acwing 343. 排序 topsort floyd 传播闭包
    Leetcode 945 使数组唯一的最小增量 贪心
    Leetcode 785 判断二分图 BFS 二分染色
  • 原文地址:https://www.cnblogs.com/nq31/p/14326361.html
Copyright © 2011-2022 走看看