当前位置: 首页 > news >正文

Flask入门(9):蓝图

目录

  • 9.蓝图
    • 9.1 概述
    • 9.2 蓝图项目结构
      • 结构1
      • 结构2
    • 9.3 添加前缀
    • 9.4 静态文件
    • 9.5 模板
    • 9.6 构建 URLs

9.蓝图

参考:http://www.pythondoc.com/flask/blueprints.html

9.1 概述

Flask 使用了 蓝图 的概念在一个应用或者跨应用中构建应用组件以及支持通用模式。 蓝图很好地简化了大型应用工作的方式,并提供给 Flask 扩展在应用上注册操作的核心方法。 一个 Blueprint 对象与 Flask 应用对象的工作方式很像,但它确实不是一个应用, 而是一个描述如何构建或扩展应用的 蓝图

蓝图的作用:

  • 把一个应用分解成一系列的蓝图。对于大型的应用是理想化的;一个项目能实例化一个应用, 初始化一些扩展,以及注册一系列的蓝图。
  • 以一个 URL 前缀和/或子域在一个应用上注册蓝图。 URL 前缀/子域名中的参数即成为这个蓝图下的所有视图函数的共同的视图参数(默认情况下)。
  • 在一个应用中用不同的 URL 规则多次注册一个蓝图。
  • 通过蓝图提供模板过滤器、静态文件、模板和其它功能。一个蓝图不一定要实现应用或视图函数。
  • 初始化一个 Flask 扩展时,在这些情况中注册蓝图。

9.2 蓝图项目结构

结构1

一般大小的项目使用此如下结构即可:

flaskBluePrint01  项目
-app1  程序子应用-static  静态文件-templates  模板文件-views  视图模块-account.py  视图文件-admin.py-user.py- __init__.py  初始化文件:注册应用,实例化对象,使用蓝图
-manage.py  项目启动文件

步骤如下:

1.创建app

app1/ __ init _ _.py

from flask import Flaskapp = Flask(__name__)

2.创建启动文件

manage.py

from app1 import appif __name__ == '__main__':app.run()

3.创建子视图

app1/views/ account.py

from flask import Blueprintac = Blueprint('ac', __name__)@ac.route('/login')
def login():return 'login'@ac.route('/logout')
def logout():return 'logout'

app1/views/admin.py

from flask import Blueprintad = Blueprint('ad', __name__)@ad.route('/home')
def home():return 'home'

app1/views/ user.py

from flask import Blueprintus = Blueprint('us', __name__)@us.route('/info')
def info():return 'info'

4.注册蓝图
app/ __ init _ _.py

from flask import Flaskapp = Flask(__name__)from .views import account
from .views import admin
from .views import userapp.register_blueprint(account.ac)
app.register_blueprint(admin.ad)
app.register_blueprint(user.us)

结构2

对于一些大型项目可以使用以下数据结构

在这里插入图片描述

注:

1.如果在 templates 中存在和 templates_users 有同名模板文件时, 则系统会优先使用 templates 中的文件 ;

2.如果是前后端分离项目,则不需要static和templates静态文件夹。

使用步骤如下:

1.创建app

app/ __ init _ _.py

from flask import Flaskapp = Flask(__name__)

2.创建启动文件

manage.py

from app1 import appif __name__ == '__main__':app.run()

3.创建子视图子应用和子视图

app1/admin/_ _ init_ _.py

from flask import Blueprintad=Blueprint('ad', __name__)from . import views

app1/admin/views.py

from . import ad@ad.route('/home')
def home():return 'home'

app1/web/_ _ init_ _.py

from flask import Blueprintwb=Blueprint('wb', __name__)from .views import *

app1/web/views.py

from . import wb@wb.route('/login')
def login():return 'login'@wb.route('/logout')
def logout():return 'logout'

4.注册蓝图

app/ __ init _ _.py

from flask import Flaskapp = Flask(__name__)
app.debug=Truefrom .admin import ad
from .web import wbapp.register_blueprint(ad)
app.register_blueprint(wb)

9.3 添加前缀

如下,修改app1|views| admin.py文件

from flask import Blueprintad = Blueprint('ad', __name__, url_prefix='/admin')@ad.route('/home')
def home():return 'home'

也可以在注册时候添加,如下:

from flask import Flaskapp = Flask(__name__)from .views import account
from .views import admin
from .views import userapp.register_blueprint(account.ac)
app.register_blueprint(admin.ad, url_prefix="/admin")
app.register_blueprint(user.us)

9.4 静态文件

一个蓝图可以通过 static_folder 关键字参数提供一个指向文件系统上文件夹的路 径,来公开一个带有静态文件的文件夹。这可以是一个绝对路径,也可以是相对于蓝图文件夹的路径:

ad=Blueprint('ad', __name__, static_folder='static_admin')

9.5 模板

指定蓝图使用的模板文件夹:

ad=Blueprint('ad', __name__, static_folder='static_admin', template_folder='templates_admin')

9.6 构建 URLs

当你想要从一个页面链接到另一个页面,你可以像通常一个样使用 url_for() 函数,只是你要在 URL 的末端加上蓝图的名称和一个点(.)作为前缀:

url_for('admin.index')

此外,如果你在一个蓝图的视图函数或是模板中想要从链接到同一蓝图下另一个端点, 你可以通过对端点的只加上一个点作为前缀来使用相对的重定向:

url_for('.index')
http://www.lryc.cn/news/15248.html

相关文章:

  • 跑步戴哪种耳机好,最适合运动跑步的蓝牙耳机
  • 微信小程序实现瀑布流布局
  • 2023最新网络工程师HCIA-Datacom“1000”道题库,光速刷题拿证
  • [蓝桥杯] 递归与递推习题训练
  • 领航智能汽车信息安全新征程 | 云驰未来乔迁新址
  • Kaldi语音识别技术(七) ----- 训练GMM
  • Java 集合基础
  • Day896.MySql的kill命令 -MySQL实战
  • L2-010 排座位
  • C++的完美讲解,还不快来看看?
  • C语言学习_DAY_5_循环结构while和for语句【C语言学习笔记】
  • JavaScript高级程序设计读书分享之4章——4.3垃圾回收
  • Java线程的6 种状态
  • 5年测试在职经验之谈:3年手工测试、2年的自动化测试,从入门到不可自拔...
  • QHash-官翻
  • MYSQL 配置优化
  • 多 态
  • Java集合
  • 高校借力泛微,搭建一体化、流程化的​内控管理平台
  • 使用人工智能赚钱的方式,行业领域有哪些?
  • 【数组中重复的数字】-C语言-题解
  • C++调用Python脚本进行18次循环操作后,脚本不执行
  • 字节10年架构师职业发展经历,助你做好职业规划
  • ArrayList真的是因为实现了RandomAccess接口才能做到快速随机访问的吗
  • OSI七层模型与物理层与设备链路层
  • Java8的Optional类的使用 和 Stream流式操作
  • Authorization Server 认证服务
  • 研制过程评审活动(五)生产定型阶段
  • NCUT加权的NMF
  • 从0开始的ios自动化测试