Flask 路由机制分析之一

news2024/11/28 4:48:57

一、前言

Flask Run运行机制剖析》这篇我们讲了应用启动的内部机制,启动后就开始监听Http请求了,请求过来如何跳到对应的函数执行,这就是路由机制。我们沿用上一篇例子,来探究一下@app.route("/")内部干了些什么事。

二、Python中函数特性

装饰器是在不改变对象结构的情况下向现有对象添加功能,它比生成子类更灵活,要理解装饰器之前我们先要要掌握Python中函数重要的几个特性。

【Python中一个函数既可以做为参数被传递,也可以做为另一个函数的返回值】

1、函数中传递函数

执行结果如下:

注:func2定义了一个入参为函数类型,并且在函数内部执行该传入的函数,这里调用时把func1这个函数传进去,这个和Java中的入参为接口,然后调用接口的方法差不多(Android中大量的callBack就是这样实现的)。

2、函数中定义函数

定义一个函数后可以在其内部再定义一个函数(嵌套函数)。

注:func1内部定义了函数func2,func1执行时可以调用内部func2,直接执行func2提示未被定义,说明func2只能在func1中被调用

3、函数返回函数

一个函数可以将另一个函数做为返回值返回。

执行结果

注:执行func1(1)返回的func3是指向func2函数的地址,然后执行func3(2)就会调用func2函数输出其返回值。

4、函数内省

函数内省是指在运行时检查对象类型的一种能力,可以理解为类型检查。

内省常见的方法如下:

三、装饰器

Python中的装饰器是高级语法(Java中装饰器是一种设计模式),它的作用是为已经存在的对象添加额外的功能,常用于插入日志、Web权限校验和缓存等,在使用上和Java的AOP、Annotation比较相似。

1、最简单装饰器例子

执行后输出

注:一个最简单的装饰器,入参为函数,函数内部嵌套函数并且返回内部函数地址,这个其实可以理解为Java中的AOP。

2、使用@调用装饰器

更简单的语法糖 @+装饰器名称放在要被装饰函数前面。

执行后输出

3、带参数的装饰器

执行后结果输出

Flask常见的装饰器@app.before_request、@app.after_request、@app.error_handlers()、@login_require()以及@app.router()等等,理解了装饰器以后我们就可以往下继续阅读@app.route("/")的源码了。

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

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

相关文章

2017年上半年上午易错题(软件设计师考试)

CPU 执行算术运算或者逻辑运算时,常将源操作数和结果暂存在( )中。 A . 程序计数器 (PC) B. 累加器 (AC) C. 指令寄存器 (IR) D. 地址寄存器 (AR) 某系统由下图所示的冗余部件构成。若每个部件的千小时可靠度都为 R &…

HiQPdf Library for .NET - HTML to PDF Crack

HiQPdf Library for .NET - HTML 到 PDF 转换器 .NET Core,用于 .NET 的 HiQPdf HTML 到 PDF 转换器 :HiQPdf HTML to PDF Library for .NET C# 和 HTML to PDF .NET Core 为您提供了一个现代、快速、灵活且强大的工具,只需几行代码即可创建复…

Python 算法高级篇:堆排序的优化与应用

Python 算法高级篇:堆排序的优化与应用 引言 1. 什么是堆?2. 堆的性质3. 堆排序的基本原理4. 堆排序的 Python 实现5. 堆排序的性能和优化6. 堆排序的实际应用7. 总结 引言 堆排序是一种高效的排序算法,它基于数据结构中的堆这一概念。堆排序…

给VSCode插上一双AI的翅膀

文章目录 前言一、安装DevChat1.1、访问地址1.2、注册1.3、在VSCode里安装DevChat插件1.3.1、未安装状态1.3.2、已安装状态 二、设置Access Key2.1. 点击左下角管理(“齿轮”图标)—命令面板(Command Palette),如下图2…

独家揭秘|小米14魔改存储芯片多出8GB空间背后的秘诀

在昨天发表的文章下面,有粉丝朋友要求“评价下小米256GB多8GB的技术”。小编也是好奇,本文就让我们一起来看看这个“高科技”背后的秘密。(提前声明:本文内容仅代表个人观点,如果不当之处,小米公司不要投诉…

09.K8S高可用-堆叠etcd拓扑测试说明

堆叠 etcd 拓扑 1、部署架构如图 2、原理说明 核心组件高可用模式高可用实现方式apiserver主备keepalived + haproxycontroller-manager主备leader electionscheduler主备leader electionetcd集群kubeadm**「vip」**由外部负载均衡器提供一个vip,流量负载到keepalived master…

vue 内置指令-v-pre/v-memo

一、v-pre 使用了该指令的元素和子元素会被编译忽略&#xff0c;也就是不进行编译&#xff0c;其中包含的所有vue模版语法都会原样显示&#xff0c;作用加快vue的编译 例子&#xff1a; <p v-pre>{{不会被编译}}<span v-text"msg"></span></p&…

2016年下半年上午易错题(软件设计师考试)

在程序运行过程中&#xff0c; CPU 需要将指令从内存中取出并加以分析和执行。 CPU 依据&#xff08; &#xff09;来区 分在内存中以二进制编码形式存放的指令和数据。 A&#xff0e;指令周期的不同阶段 B &#xff0e;指令和数据的寻址方式 C &#xff0e;指令操作码的…

基于计算机视觉的坑洼道路检测和识别-MathorCup A(深度学习版本)

1 2023 年 MathorCup 高校数学建模挑战赛——大数据竞赛 赛道 A&#xff1a;基于计算机视觉的坑洼道路检测和识别 使用深度学习模型&#xff0c;pytorch版本进行图像训练和预测&#xff0c;使用ResNet50模型 2 文件夹预处理 因为给定的是所有图片都在一个文件夹里面&#xf…

Wpf 使用 Prism 实战开发Day03

一.实现左侧菜单绑定 效果图: 1.首先需要在项目中创建 mvvm 的架构模式 创建 Models &#xff0c;放置实体类。 实体类需要继承自Prism 框架的 BindableBase&#xff0c;目的是让实体类支持数据的动态变更! 例如: 系统导航菜单实体类 / <summary>/// 系统导航菜单实体类…

AWTK 液体流动效果控件发布

液体流动效果控件。 主要特色&#xff1a; 支持水平和垂直方向。支持正向和反向流动。支持设置头尾的图片。支持设置流动的图片。支持设置速度的快慢。支持启停操作。 准备 获取 awtk 并编译 git clone https://github.com/zlgopen/awtk.git cd awtk; scons; cd -运行 生成…

2023-10-29 LeetCode每日一题(H 指数)

2023-10-29每日一题 一、题目编号 274. H 指数二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a…

【管理运筹学】第 10 章 | 排队论(5,多服务台排队系统、一般服务时间模型、P-K 公式、排队系统的经济分析)

文章目录 引言一、多服务台排队系统二、一般服务时间 M / G / 1 M/G/1 M/G/1 模型Pollaczek-Khinchine&#xff08;P-K&#xff09;公式 三、排队系统的经济分析写在最后 引言 对于多服务台负指数分布排队系统&#xff0c;大纲要求没那么深&#xff0c;只提到了状态转移图以及…

A. Doremy‘s Paint 3

今天第一次打CF&#xff0c;不过鼠鼠被气死了 先说说战况&#xff0c;今天一发没A&#xff08;赛场上&#xff09;&#xff0c;生活真是无奈&#xff0c;废物女友真是一点用没有 心里也很烦&#xff0c;什么压力都自己扛着。每天想尝试改变什么&#xff0c;又被现实掣肘&…

Leetcode刷题详解——第 N 个泰波那契数

1. 题目链接&#xff1a;1137. 第 N 个泰波那契数 2. 题目描述&#xff1a; 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 示例 1&#xff1a; 输入&#…

矩阵点乘multiply()函数和矩阵乘法dot()函数

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 矩阵点乘multiply()函数 和矩阵乘法dot()函数 [太阳]选择题 使用multiply()和dot()函数,输出错误的是&#xff1a; import pandas as pd import numpy as np df1pd.DataFrame([[0,1],[2,3]])…

Python---使用turtle模块+for循环绘制五角星---利用turtle(海龟)模块

首先了解涉及的新词汇&#xff0c;编程外国人发明的&#xff0c;所以大部分是和他们语言相关&#xff0c;了解对应意思&#xff0c;可以更好理解掌握。 import 英 /ˈɪmpɔːt/ n. 进口&#xff0c;进口商品&#xff1b;输入&#xff0c;引进&#xff1b;重要性&#xff1b;…

线程池里对异常的处理方式

方式&#xff1a;重写afterExecute方法, 统一处理线程池里抛出的异常。 但是要区分是execute方式提交的&#xff0c;还是submit方式提交的。 代码如下&#xff1a; public class Test001 {public static void main(String[] args) throws Exception {ExecutorService executor…

Redis(07)| 数据结构-跳表

Redis 只有 Zset 对象的底层实现用到了跳表&#xff0c;跳表的优势是能支持平均 O(logN) 复杂度的节点查找。 zset 结构体里有两个数据结构&#xff1a;一个是跳表&#xff0c;一个是哈希表。这样的好处是既能进行高效的范围查询&#xff0c;也能进行高效单点查询。 typedef s…

37基于MATLAB平台的图像去噪,锐化,边缘检测,程序已调试通过,可直接运行。

基于MATLAB平台的图像去噪&#xff0c;锐化&#xff0c;边缘检测&#xff0c;程序已调试通过&#xff0c;可直接运行。 37matlab边缘检测图像处理 (xiaohongshu.com)