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

快速上手

目录结构

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

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

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

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

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

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

案例

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

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

整理项目

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

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

分别创建:

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

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

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

请忽视 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

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

user in login

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

user in logup

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

Original: https://blog.csdn.net/qq_41103843/article/details/121474116
Author: 我想养只猫 •͓͡•ʔ
Title: 【Flask】 一个案例学会 Flask 蓝图(Blueprint)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/746301/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 问卷星去除微信登录弹窗

    今天有场问卷答题,想在电脑网页上查看题目,但被弹窗阻止 一般逻辑是把弹窗元素去除,但背景文字还是模糊的看不清,所以进阶操作是查看网页js代码 通过查看js代码发现了关键内容 我们紧…

    Python 2023年6月11日
    0252
  • C#落选,Python“连庄”年度编程语言,TIOBE 编程语言排行榜出炉

    Original: https://www.cnblogs.com/sn520/p/15772185.htmlAuthor: Python可乐呀Title: C#落选,Python…

    Python 2023年5月24日
    093
  • Python 官方研讨会:彻底移除 GIL 真的可行么?

    作者:Łukasz Langa 译者:豌豆花下猫,来源:Python猫 在一年一度的 Python 核心开发者 sprint 会议期间,我们与 Sam Gross 举行了一次会议,…

    Python 2023年5月25日
    0106
  • 神经网络模型predict预测值全部为0

    Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)根据上文作者所说搞不清楚数据的标准化和归一化的关系,想对原始数据做归一化,却误把数据做了标准化,导…

    Python 2023年6月3日
    072
  • pandas基础绘图函数

    pandas基础绘图函数 Series和DataFrame都有一个用于生成各类图表的plot方法。默认情况下,它们所生成的是线形图。 Series画图,默认会用index作为x轴的…

    Python 2023年9月3日
    054
  • ChatGPT体验和教程

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年11月7日
    061
  • Python:如何使用matplotlib绘制折线图

    前言: 我的python学习也告一段落了。不过有些,方法还是打算总结一下和大家分享。我整理了使用matplotlib绘制折线图的一般步骤,按照这个步骤走绘制折线图一般都没啥问题。其…

    Python 2023年8月30日
    057
  • 【Python爬虫】论坛发图辅助脚本

    因为论坛发帖手动插入链接太费时间,所以我自己用Python爬虫写了一个小脚本,用来自动上传图片到图床,然后返回链接,我们只需直接复制链接就可以啦 因为不同图床需要提交的POST表单…

    Python 2023年11月2日
    037
  • 【简述】【图】P类问题、NP类问题、NP完全问题和NP难问题

    P类问题(Polynomial Problem) P类问题是指 一类能够用确定性算法在多项式时间内求解的判定问题。其实,在非正式的定义中,我们可以把那些在多项式时间内求解的问题当作…

    Python 2023年10月10日
    055
  • 容器镜像多架构支持介绍

    容器镜像多架构支持介绍 简介 出于开发需要,我们经常会需要浏览公共镜像库,以选取合适的基础镜像,在浏览过程中,不经意地会发现部分镜像的一个tag下列出了许多种架构,如下图所示,de…

    Python 2023年10月15日
    056
  • Python异步处理返回进度——Flask实现进度条

    文章目录 问题描述 解决方案 Flask 参考文献 问题描述 Python异步处理,新起一个进程返回处理进度 解决方案 使用 tqdm 和 multiprocessing.Pool…

    Python 2023年8月11日
    045
  • DataFrame数据处理

    文章目录 * – 数据预处理 – 数据查询 – 数据修改 – 数据排序 – 数据合并 数据预处理 数据分析的第一步是提高…

    Python 2023年8月7日
    075
  • 【菜菜的sklearn课堂笔记】聚类算法Kmeans-聚类算法的模型评估指标

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年9月26日
    051
  • 灰色预测模型_python

    [ _灰色预测模型_是一种基于指数平滑方法的预测模型,可以用于预测非线性和不确定性系统的发展趋势。在 _Python_中,可以使用NumPy和Pandas等库实现 _灰色预测模型_…

    Python 2023年8月1日
    051
  • 新一代 Python 包管理工具来了

    1 简介 ====说起 Python的包管理工具,大家第一时间想到的肯定是 pip、 conda等经典工具。 但最近技术群里一个朋友发现了一款新颖的 Python 包管理工具——p…

    Python 2023年8月15日
    076
  • 用matplotlib的Animation画动图

    摘要:本文通过几个例子学习了 matplotlib.animation 画动图的方法 Original: https://blog.csdn.net/u011472272/arti…

    Python 2023年8月31日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球