【Flask】 一个案例学会 Flask 蓝图(Blueprint)

def test():

return “test”

_ init _ 中应用

from flask import Flask

from views import test

app = Flask(name)

app.register_blueprint(test.ts)


介绍

=================================================================

什么是蓝图?


一个蓝图定义了可用于单个应用的视图,模板,静态文件等等的集合。举个例子,想象一下我们有一个用于管理面板的蓝图.

这个蓝图将定义像*/admin/login_和_/admin/dashboard*这样的路由的视图。它可能还包括所需的模板和静态文件。你可以把这个蓝图当做你的应用的管理面板.

我们为什么需要蓝图


我认为这就像大部分后端框架往往需要你先学习MVC架构一样,因为蓝图对比在Flask中的代码量来说,理解它的思想更为重要


Blueprint架构

==========================================================================

功能式架构


一句话: 按功能模块分区

例如视图模板分区开来

在功能式架构中,按照每部分代码的功能来组织你的应用。所有模板放到同一个文件夹中,静态文件放在另一个文件夹中,而视图放在第三个文件夹中。

test/

init.py

static/

templates/

home/

control_panel/

admin/

views/

init.py

home.py

control_panel.py

admin.py

models.py

除了_views/init.py_,在_views/文件夹中的每一个.py_文件都是一个蓝图。

在*/init.py*中,我们将加载这些蓝图并在我们的Flask()对象中注册它们。

分区式架构


一句话: 按照影响范围分区

例如主页界面登录界面分区

在分区式架构中,按照每一部分所属的蓝图来组织你的应用。管理面板的所有的模板,视图和静态文件放在一个文件夹中,用户控制面板的则放在另一个文件夹中。

test/

init.py

admin/

init.py

views.py

static/

templates/

home/

init.py

views.py

static/

templates/

control_panel/

init.py

views.py

static/

templates/

models.py

在像上面列举的分区式结构,每一个_test/之下的文件夹都是一个独立的蓝图。所有的蓝图通过顶级的init.py_注册到Flask()中。

哪种更胜一筹?


选择使用哪种架构实际上是一个个人问题。两者间的唯一区别是表达层次性的方式不同 – 你可以使用任意一种方式架构Flask应用 – 所以你所需的就是选择贴近你的需求的那个

如果你的应用是由独立的,仅仅共享模型和配置的各组件组成,分区式将是个好选择。

一个例子是允许用户建立网站的SaaS应用。你将会有独立的蓝图用于主页,控制面板,用户网站,和高亮面板。这些组件有着完全不同的静态文件和布局。如果你想要将你的蓝图提取成插件,或用之于别的项目,一个分区式架构将是正确的选择。

另一方面,如果你的应用的组件之间的联系较为紧密,使用功能式架构会更好。

如果Facebook是用Flask开发的,它将有一系列蓝图,用于静态页面(比如登出主页,注册页面,关于,等等),面板(比如最新消息),用户内容(/robert/about和/robert/photos),还有设置页面(/settings/security和/settings/privacy)以及别的。

这些组件都共享一个通用的布局和风格,但每一个都有它自己的布局。下面是一个非常精简的可能的Facebook结构,假定它用的是Flask。

facebook/

init.py

templates/

layout.html

home/

layout.html

index.html

about.html

signup.html

login.html

dashboard/

layout.html

news_feed.html

welcome.html

find_friends.html

profile/

layout.html

timeline.html

about.html

photos.html

friends.html

edit.html

settings/

layout.html

privacy.html

security.html

general.html

views/

init.py

home.py

dashboard.py

profile.py

settings.py

static/

style.css

logo.png

models.py

位于*facebook/view/*下的蓝图更多的是视图的集合而非独立的组件。

同样的静态文件将被大多数蓝图重用。

大多数模板都拓展自一个主模板。

一个功能式的架构是组织这个项目的好的方式。


案例

=================================================================

这里我们选择功能式架构作为分类方案,来实现一个最简单的 登陆注册/后台管理 功能逻辑

其实我更倾向于选择分区式架构来设计我的项目 – 可能是微服务带来的"后遗症"

整理项目


首先创建一个flask项目,并在内做好分区

image-20211115203220104

分别创建:

  • static目录 存储静态文件

  • trmplates目录 存储页面文件

  • views目录 存储路由文件

之后我们创建几个基本的文件

image-20211115211808228

请忽视venv文件夹

填充内容


templates

最后

编程基础的初级开发者,计算机科学专业的学生,以及平时没怎么利用过数据结构与算法的开发人员希望复习这些概念为下次技术面试做准备。或者想学习一些计算机科学的基本概念,以优化代码,提高编程技能。这份笔记都是可以作为参考的。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

名不虚传!字节技术官甩出的"保姆级"数据结构与算法笔记太香了

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值