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

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

快速上手

目录结构

5.png

test.py 中注册蓝本


from flask import Blueprint
test = Blueprint('ts', __name__)
@test.route('/test')
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


1

2

3

4

5

6

7

8

9

10

11

12

13

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


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


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


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



案例

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


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


整理项目

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


6.png


分别创建:


  • static目录 存储静态文件
  • trmplates目录 存储页面文件
  • views目录 存储路由文件

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

7.png


请忽视venv文件夹


填充内容

templates

admin.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>后台管理</title>
    <link rel="stylesheet" href="{{ url_for('static',filename='style.css') }}">
</head>
<body>
    <h1>后台管理</h1>
</body>
</html>


user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>欢迎使用</title>
    <link rel="stylesheet" href="{{ url_for('static',filename='style.css') }}">
</head>
<body>
    {% if status == "login" %}
    <h1>登录...</h1>
    {% elif status == "logup" %}
    <h1>注册...</h1>
    {% else %}
    <h1>status 出错了!</h1>
    {% endif %}
</body>
</html>


static

style.css
*{
    background: #ce9191;
}


views

admin.py
from flask import Blueprint, render_template
ad = Blueprint('ad', __name__)
@ad.route('/admin')
def admin():
    return render_template('admin.html')


user.py

from flask import Blueprint, render_template
us = Blueprint('us', __name__,)
@us.route('/login')
def login():
    return render_template('user.html', status='login')
@us.route('/logup')
def logup():
    return render_template('user.html', status='logup')


_ init _.py

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


测试

注册

export FLASK_APP=__init__.py
export FLASK_ENV=development
flask run


检查

admin

user in login

9.png


user in logup


10.png

目录
相关文章
|
机器人 UED Python
基于Python+Flask实现一个简易网页验证码登录系统案例
基于Python+Flask实现一个简易网页验证码登录系统案例
689 0
基于Python+Flask实现一个简易网页验证码登录系统案例
|
JSON 安全 数据格式
Flask 高级应用:使用蓝图模块化应用和 JWT 实现安全认证
本文将探讨 Flask 的两个高级特性:蓝图(Blueprints)和 JSON Web Token(JWT)认证。蓝图让我们可以将应用模块化,以便更好地组织代码;而 JWT 认证是现代 Web 应用中常见的一种安全机制。
|
数据采集 自然语言处理 数据可视化
优秀python系统案例】基于python Flask的电影票房数据爬取与可视化系统的设计与实现
本文介绍了一个基于Python Flask框架开发的电影票房数据爬取与可视化系统,该系统利用网络爬虫技术从豆瓣电影网站抓取数据,通过Python进行数据处理和分析,并采用ECharts等库实现数据的可视化展示,为电影行业从业者提供决策支持。
2004 2
优秀python系统案例】基于python Flask的电影票房数据爬取与可视化系统的设计与实现
|
iOS开发 MacOS Python
Python编程小案例—利用flask查询本机IP归属并输出网页图片
Python编程小案例—利用flask查询本机IP归属并输出网页图片
305 1
|
数据采集 数据可视化 大数据
【优秀python大屏案例】基于python flask的前程无忧大数据岗位分析可视化大屏设计与实现
本文介绍了一个基于Python Flask框架的前程无忧大数据岗位分析可视化大屏系统,该系统通过爬虫技术采集招聘数据,利用机器学习算法进行分析,并以可视化大屏展示,旨在提高招聘市场数据分析的效率和准确性,为企业提供招聘决策支持和求职者职业规划参考。
994 2
|
数据采集 数据可视化 算法
基于Python flask的boss直聘数据分析与可视化系统案例,能预测boss直聘某个岗位某个城市的薪资
本文介绍了一个基于Python Flask框架的Boss直聘数据分析与可视化系统,系统使用selenium爬虫、MySQL和csv进行数据存储,通过Pandas和Numpy进行数据处理分析,并采用模糊匹配算法进行薪资预测。
802 0
基于Python flask的boss直聘数据分析与可视化系统案例,能预测boss直聘某个岗位某个城市的薪资
|
前端开发 JavaScript 中间件
七、Flask蓝图使用之七
七、Flask蓝图使用之七
492 0
|
存储 数据库 开发者
Flask中的蓝图与插件应用:构建模块化Web应用的利器
【7月更文挑战第19天】Flask蓝图和插件是构建模块化、可扩展和可维护Web应用的强大工具。蓝图允许你将应用分割成多个独立的部分,提高了代码的组织性和可重用性;而插件则为Flask应用提供了丰富的功能和社区支持,简化了开发过程。通过合理地使用蓝图和插件,你可以更加高效地开发出高质量的Web应用。
|
Python
Flask蓝图(Blueprint)
蓝图是一种将路由、视图函数和静态文件等组织在一起的方法。它将相似功能的路由和视图函数分组,使得应用程序更易于维护和扩展。下面是一个简单的蓝图示例:app.run()在上述示例中,我们创建了一个名为的蓝图,并将路由定义在其中。然后,我们通过方法将蓝图注册到 Flask 应用程序中。这样,当用户访问和/about路径时,Flask 将调用相应的视图函数并返回结果。
756 1
|
存储 缓存 安全
Flask中的Blueprint
【5月更文挑战第15天】在Flask中,Blueprints用于实现Web应用的模块化,帮助组织路由和视图。它们提供模块化组织、路由命名空间和代码可重用性。通过创建和注册蓝图,如`auth_bp`和`blog_bp`,相关功能的代码可以分组,便于管理和维护。蓝图间可通过`session`共享数据,实现更复杂的功能。蓝图还能管理模板和静态文件,与测试框架和文档工具集成,并在部署和扩展时保持应用性能。通过合理利用Blueprints,开发者可以构建易于维护、高性能且安全的大型Web应用。