Python-Flask 蓝图以及钩子函数(5)

news2025/7/5 11:09:54

Flask 蓝图

  • 一、初识蓝图的页面结构
  • 二、创建蓝图的步骤
  • 三、钩子函数

官方解释:Blueprint 是一种组织一组相关视图及其他代码的方式。与把视图及其他 代码直接注册到应用的方式不同,蓝图方式是把它们注册到蓝图,然后在工厂函数中 把蓝图注册到应用。

Flaskr 有两个蓝图,一个用于认证功能,另一个用于博客帖子管理。每个蓝图的代码 都在一个单独的模块中。使用博客首先需要认证,因此我们先写认证蓝图。

个人自己的理解:蓝图是路由的另一种方式,一个项目中会有很多不同的功能,如果将这些功能的视图写在一个app.py文件里面的话,会显得很臃肿,不易阅读,也不易后期维护。一般来说会根据不同的功能拆分成很多模块,比如用户管理、权限管理、商品管理、库存管理、订单管理等等,每一个模块都有自己对应的一个路由文件,将这些路由注册到一个公共的对象里面去,这个对象可以理解为蓝图,然后再讲蓝图注册到app里面去,也就是flask对象里面去,就完成了视图、客户端、服务器的绑定。通过这种方式,,开发者能够把他们的应用拆分成不同的组件。 在我们的架构中,,蓝图的作用类似于控制器的效果。

一、初识蓝图的页面结构

创建蓝图前的写法:app.py文件包含多个功能模块的视图
在这里插入图片描述
创建蓝图后:
用户管理功能对应的视图文件
在这里插入图片描述
apps包下的初始化文件,用于创建创建flask对象,只要其他地方加载这个包下面的文件会自动加载该文件。
在这里插入图片描述
app.py文件
app.py文件

从上面对比可以看出,引入蓝图后,启动文件app.py内容就显得很简洁,并且根据功能分成不同的模块,可阅读性强。同一功能的路由以及视图函数都分门别类的存在相应功能的模块中,后期维护,添加,修改内容也更方便,可维护性强。

二、创建蓝图的步骤

蓝图的使用步骤分为三步:

  • 创建一个蓝图对象
    • user_bp = Blueprint(‘user’, name)
    • 有两个参数:
      • 一个是蓝图的名称
      • 一个是蓝图所在的模块
  • 在这个蓝图对象上进行操作:注册路由,指定静态文件夹, 注册模板过滤器
    • 注册路由: 通过@user_bp.route(’/’)装饰器
    • 指定静态文件夹:因为默认是在app.py文件中创建flask对象的,flask对象底层有一些默认的配置,指定templates模板文件夹路径,static静态文件夹路径等信息。默认的templates路径是与app.py同级的文件夹下,如果创建flask对象迁移至apps或者其他文件夹下的话,需要在创建flask对象时,通过template_folder=’…/templates’参数指定模板文件夹的路径,这时视图函数中返回的模板页面才能找得到。
@user_bp.route('/')
def user_center():
    return render_template('user/show.html', users=users)
  • 在应用对象上注册蓝图对象
    • 通过第二步将路由和蓝图绑定后,这时蓝图还未与模板建立联系,也就还未与客户端建立联系,因此还需将应用对象(flask对象)上注册该蓝图。
    • 通过app.register_blueprint(user_bp) 将蓝图对象绑定到app上,绑定前需要先将蓝图导入到该文件中。
      在这里插入图片描述

三、钩子函数

对于视图函数而言,还有四种方式根据不同的场景需求在视图函数返回前后做一些定制化的处理来完成业务的开发需求,实现的方式叫做钩子函数。最常见的有以下四种钩子函数,分别是在视图函数处理前,处理后,返回前,对请求做的处理。

before_first_request                     第一次请求处理前执行, 后续请求到来不执行, 只执行一次

before_request                             每个请求到来前都执行一次

after_request                                请求处理后无异常执行该钩子

teardown_request                        请求处理后, 无论存在异常与否, 都会执行该请求钩子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7103.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git 用法指导

1. 安装 Git 1. linux 安装 Git # 试着输入git,看看系统有没有安装Git: $ git The program git is currently not installed. You can install it by typing: sudo apt-get install git# 安装命令 sudo apt-get install git 如果是其他Linux版本&#…

Vue | Vue.js 高级语法系列

🖥️ Vue.js专栏:Vue.js 高级语法系列 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ 👉…

都说测试行业饱和了,为什么我们公司给初级测试开到了12K?

故事起因: 最近我有个刚毕业的学生问我说:我感觉现在测试行业已经饱和了,也不是说饱和了,是初级的测试根本就没有公司要,哪怕你不要工资也没公司要你,测试刚学出来,没有任何的项目经验和工作经验…

字符串c++练习(KMP等)

反转字符串 文章目录反转字符串反转字符串||替换空格翻转字符串里的单词左旋转字符串找出字符串中第一个匹配项的下标【模板】KMP字符串匹配题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示样例 1 解释数据规模与约定重复的字符串[BOI2009]Radio Transmission 无线…

【Linux】Linux中的环境变量及其意义

目录 一、环境变量的概念 1、让自己写的可执行程序无需路径即可执行的方法 1.1将可执行程序拷贝至/usr/bin/目录下 1.2将test的绝对路径添加至PATH中 二、环境变量相关的命令 三、getenv()(获取环境变量) 四、main函数命令行参数的解析及意义 1、…

如何基于TS在React中使用Redux Toolkit

什么是Redux Redux 是 JavaScript 应用程序的状态容器,提供可预测的状态管理.可以帮助你开发出行为稳定可预测的、运行于不同的环境(客户端、服务器、原生应用)、易于测试的应用程序。不仅于此,它还提供超爽的开发体验&#xff0…

【Pytorch with fastai】第 3 章 :数据伦理

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

CentOS7安装MySQL(亲测版)

1 Yum Repository下载安装包文件 [rootlocalhost home]# wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm2 使用yum安装mysql yum install mysql-server执行后报错,官方5.7版本默认没有GPG key, 需要在上述命令上 添加 --nogpgcheck …

图解计算机内部的高速公路 —— 总线系统

本文已收录到 GitHub AndroidFamily,有 Android 进阶知识体系,欢迎 Star。技术和职场问题,请关注公众号 [彭旭锐] 进 Android 面试交流群。 前言 大家好,我是小彭。 在之前的文章中,我们聊到了计算机的冯诺依曼计算…

2022-09-17青少年软件编程(C语言)等级考试试卷(五级)解析

​​​​​​T1. 城堡问题 【题目描述】 图1是一个城堡的地形图。请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡被分割成mn(m≤50,n≤50)个方块,每个方块可以有0~4面墙。 【输入】 程序从标准输入设备读入数据。第1、2行每行1个整数,分别是南北向、东西…

MySQL数据库基础

文章目录一. 数据库的操作二. 数据库中常用的数据类型三.表的操作四. 总结一. 数据库的操作 1. 创建数据库 创建语法1 crate database [这里填入表名称]; 说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8&#xf…

(十二)Jmeter测试dubbo接口

一、概览 先去https://github.com/thubbo/jmeter-plugins-for-apache-dubbo下载扩展jar包将下载的jar包复制到 jmeter/lib/ext/下重启Jmeter创建Dubbo取样器 二、实操 添加dubbo取样器 输入请求详情 参数类型可以在 https://github.com/thubbo/jmeter-plugins-for-apache-…

如何在Retail Link网站上与Walmart进行EDI连接测试?

本文主要介绍通过沃尔玛Walmart供应商平台Retail Link与沃尔玛Walmart建立EDI连接的流程。沃尔玛Walmart作为零售行业中最先使用AS2协议传输EDI数据的企业之一,其AS2经过多年的使用检验,具有安全连接、灵活数据传输等优点,使其经久不衰&#…

Qt Xml文件的创建和解析[xml和dom方式]

Qt Xml文件的创建和解析[xml和dom方式] 【1】Qt XML使用说明【2】Qt XML未来可期【3】Qt XML文件格式【4】Qt 读取XML文档的方法【5】Qt XML解析方式比较【6】QXmlStreamReader类说明【7】QXmlStreamWriter类说明【8】DOM说明【9】XML常用函数【10】DOM常用函数【11】XML和DOM源…

摊牌了,请各位做好一年内随时失业的准备

前两天跟一个HR朋友聊天,她表示刚在boss上发布了一个普通测试岗位,不到一小时竟然收到了几百份简历。而且简历质量极高,这是往年不敢想象的。岗位少,竞争激烈,这是今年软件测试就业的真实写照,也是所有岗位…

Python开发环境及常用Web框架

Python Python是一门易于学习、功能强大的编程语言。它提供了高效的高级数据结构,还能简单有效地面向对象编程。Python 优雅的语法和动态类型以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。 吉多范罗苏姆(Guido…

基于Postmate实现的跨域通信

1、Postmate 介绍 是一款基于 postMessage 来处理父子页面通信的库,轻量且好用。一个强大的、简单的、基于 promise 的 postMessage iFrame 通信库。 postmate 官方地址 https://github.com/dollarshaveclub/postmate 2、Postmate 特性 基于 promise 的 API&…

如何将数字改为千分符且保留两位小数显示?toLocaleString()和toFixed(2)踩坑

前言 基于现代Web前端框架的应用,其原理是通过浏览器向服务器发送网络请求,获取必要的index.html和打包好的JS、CSS等资源,在浏览器内执行JS,动态获取数据并渲染页面,从而将结果呈现给用户。在这个过程中,…

【java学习】 static

文章目录成员变量static 工具类static 代码块设计模式继承重写成员变量 1.成员变量的分类和访问分别是什么样的? 静态成员变量(有static修饰,属于类、加载一次,可以被共享访问),访问格式 类名.静态成员变量(推荐) 对…

R语言七天入门教程六:文件相关操作

R语言七天入门教程六:文件相关操作 一、文件的读写 R 语言作为统计学编程语言,常常需要处理大量数据,而这些数据通常会从文件中进行读取,因此文件读写在R语言中是非常重要的操作。在R语言中,用到最多的文件格式是csv…