• 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的一样

  • 相关阅读:
    LC 155 Min Stack
    TUM 慕尼黑工业大学 MSEI 课程结构介绍 ws19/20
    C++ MinGW 配合 Sublime Text 搭建
    LC 752 Open the Lock
    LC 200 Number of Islands
    Python lambda
    关于无法连接网络安装VisualVM解决方案
    二叉堆的解读
    哈希表的实现
    红黑树解读
  • 原文地址:https://www.cnblogs.com/nq31/p/14326361.html
Copyright © 2020-2023  润新知