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目录中找
'''

 

原文地址:https://www.cnblogs.com/nq31/p/14326361.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Jinja2:是Python的Web项目中被广泛应用的模板引擎,是由Python实现的模板语言,Jinja2 的作者也是 Flask 的作者。他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能,其是Flask内置的模板语言。
Fullcalendar日历使用,包括视图选择、事件插入、编辑事件、事件状态更改、事件添加和删除、事件拖动调整,自定义头部,加入el-popover显示图片、图片预览、添加附件链接等,支持手机显示。
监听QQ消息并不需要我们写代码,因为市面上已经有很多开源QQ机器人框架,在这里我们使用go-cqhttp官方文档:go-cqhttp如果您感兴趣的话,可以阅读一下官方文档,如果不想看,直接看我的文章即可。
【Flask框架】—— 视图和URL总结
python+web+flask轻量级框架的实战小项目。登录功能,后续功能可自行丰富。
有了这个就可以配置可信IP,关键是不需要企业认证,个人信息就可以做。
本专栏是对Flask官方文档中个人博客搭建进行的归纳总结,与官方文档结合事半功倍。 本人经验,学习一门语言或框架时,请首先阅读官方文档。学习完毕后,再看其他相关文章(如本系列文章),才是正确的学习道路。
本专栏是对Flask官方文档中个人博客搭建进行的归纳总结,与官方文档结合事半功倍。基础薄弱的同学请戳Flask官方文档教程 本人经验,学习一门语言或框架时,请首先阅读官方文档。学习完毕后,再看其他相关文章(如本系列文章),才是正确的学习道路。 如果python都完全不熟悉,一定不要着急学习框架,请首先学习python官方文档,一步一个脚印。要不然从入门到放弃是大概率事件。 Python 官方文档教程
快到年末了 相信大家都在忙着处理年末数据 刚好有一个是对超市的商品库存进行分析的学员案例 真的非常简单~
一个简易的问答系统就这样完成了,当然,这个项目还可以进一步完善,比如 将数据存入Elasticsearch,通过它先进行初步的检索,然后再通过这个系统,当然我们也可以用其他的架构实现。如果你对这系统还有其他的疑问,也可以再下面进行留言!!!
#模版继承和页面之间的调用@app.route("/bl")def bl(): return render_template("file_2.html")主ht
#form表达提交@app.route("/data",methods=['GET','POST']) #methods 让当前路由支持GET 和
#form表达提交@app.route("/data",methods=['GET','POST']) #methods 让当前路由支持GET 和
#session 使用app.secret_key = "dsada12212132dsad1232113"app.config['PERMANENT_SESSION_LI
#文件上传@app.route("/file",methods=['GET','POST'])def file(): if request.meth
#跳转操作:redirect@app.route("/red")def red(): return redirect("/login")
#session 使用app.secret_key = "dsada12212132dsad1232113"app.config['PERMANENT_SESSION_LI
@app.route("/req",methods=['GET','POST'])def req(): print(request.headers)
#模版继承和页面之间的调用@app.route("/bl")def bl(): return render_template("file_2.html")主ht
#文件操作:send_file,支持图片 视频 mp3 文本等@app.route("/img")def img(): return send_file("1.jpg&q