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

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之外,其他装饰器都有

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值