Flask 路由机制分析之一

一、前言

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.rhkb.cn/news/176074.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VDA到Excel方案介绍之自定义邮件接收主题

VDA标准是德国汽车工业协会(Verband der Automobilindustrie,简称VDA)制定的一系列汽车行业标准。这些标准包括了汽车生产、质量管理、供应链管理、环境保护、安全性能等方面的规范和指南。VDA标准通常被德国和国际上的汽车制造商采用&#x…

【算法-数组1】二分查找 和 移除元素

今天,带来XXX的讲解。文中不足错漏之处望请斧正! 理论基础 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标&#…

yum 命令

基本语法 yum [选项] [参数] 选项说明 -y 对所有提问都回答“yes” 参数说明 实操 yum list | grep firefox yum -y remove firefox yum -y install firefox

使用MobaXterm向linux窗口化传输文件

使用MobaXterm向linux窗口化传输文件 之前上大学的时候,经常是XSheel配合Xftp使用,Xftp可以窗口化的往linux服务器传输文件,但是有一个问题,就是Xftp是收费的。 后来工作之后师兄给推荐了一个免费的,又好用的类似于Xf…

uni-app/vue 文字转语音朗读(附小程序语音识别和朗读)uniapp小程序使用文字转语音播报类似支付宝收款播报小程序语音识别和朗读)

uni-app/vue 文字转语音朗读(小程序语音识别和朗读) uniapp小程序功能集合 1、uniapp小程序文字转语音播报 一、第一种方式:直接加语音包 固定的文本 先利用工具生成了 文本语音mp3文件,放入项目中,直接用就好了 …

【CSS】position

CSS position 1.静态布局 static static 是 position 属性的默认值,表示没有定位。使用静态定位的元素会按照元素正常的位置显示,并且不会受到 top、bottom、left、right 和 z-index 属性的影响。 2.相对定位 relative 相对定位就是元素相对于自己默…

Spring Cloud 之RabbitMQ的学习【详细】

服务通信 分布式系统通信两种方式: 直接远程调用(同步)借助第三方间接通信(异步) 同步通讯的问题 Feign就属于同步通讯。存在的如下问题 耦合度高,每次添加新的模块就要修改原有模块的代码性能下降&am…

css(层叠样式表)

文章目录 一、CSS介绍二、CSS使用方式1. 行内样式/内联样式(单一页面中使用)设置背景颜色 background-color:green; 2. 内嵌样式(少量页面中使用)3. 外链样式表(项目中使用) 三、 样式表特征1. 层叠性2. 继…

学习redis之前的泛泛而谈(特性介绍,应用场景,Ubuntu安装与通用命令介绍)

文章目录 前言关于分布式系统Redis特性Redis应用场景Redis5安装redis命令最核心的两个命令:get和setkeysexitsdelexpirettlredis中key的过期策略type redis数据类型的内部实现方式redis的单线程 前言 redis最重要的概念:在内存中存储数据 为什么要设计一…

代购商城源码是否可以定制开发?

定制开发,符合个性需求 代购商城源码是现代电子商务中的重要工具,它为代购商提供了建立在线店铺、管理产品和订单、处理支付和物流等功能。然而,对于不同的代购商而言,在源码的基础上进行个性化定制开发无疑是提升竞争力和用户体验…

2023年软件测试工具总结 —— 单元测试工具

在应用程序中,单元是具有一个或多个输入和单个输出的软件中最小可测试部分。单元测试是一种测试软件代码单元的方法,通常包括一个或两个输入,产生一个输出。单元测试主要关注独立模块的功能正确性,目的是确保每个单元都按照预期的…

毛发渲染方案实现

一、毛发材质概述 以前毛发只能用离线来做 现在实时毛发逐渐可能。长毛渲染和短毛渲染采用的是不同的方案。 二、长毛类制作分析 各向异性 kajiya算法 # 三、短毛类制作分析 四、制作心得及技巧

成为一个优秀的测试工程师需要具备哪些知识和经验?

看到这个题目,头脑中马上就拆分出了3个小问题: 1、什么是优秀的测试工程师? 2、优秀测试工程师需要哪些知识? 3、优秀测试工程师需要哪些经验? 一个个讲解。 一、什么才是一名优秀的测试工程师呢? 什么才是…

奇富科技引领大数据调度革命:高效、稳定、实时诊断

日前,在世界最大的开源基金会 Apache旗下最为活跃的项目之一DolphinScheduler组织的分享活动上,奇富科技的数据平台专家刘坤元应邀为国内外技术工作者献上一场题为《Apache DolphinScheduler在奇富科技的优化实践》的精彩分享,为大数据任务调…

C++进阶语法——智能指针【学习笔记(五)】

文章目录 1、智能指针简介1.1 原始指针(raw pointer)的⼀些问题1.2 智能指针(smart pointers) 2、智能指针(smart pointers)——unique_ptr2.1 unique_ptr 的声明2.2 unique_ptr 的函数2.3 ⾃定义类型使⽤ …

Go-Python-Java-C-LeetCode高分解法-第十二周合集

前言 本题解Go语言部分基于 LeetCode-Go 其他部分基于本人实践学习 个人题解GitHub连接:LeetCode-Go-Python-Java-C 欢迎订阅CSDN专栏,每日一题,和博主一起进步 LeetCode专栏 我搜集到了50道精选题,适合速成概览大部分常用算法 突…

比较Excel中的两列目录编号是否一致

使用java代码比较excel中两列是否有包含关系,若有包含关系,核对编号是否一致。 excel数据样例如下: package com.itownet.hg;import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import j…

C++设计模式_21_Iterator 迭代器(理解;面向对象的迭代器已过时;C++中使用泛型编程的方式实现)

Iterator 迭代器也是属于“数据结构”模式。GoF中面向对象的迭代器已经过时,C中目前使用泛型编程的方式实现,其他语言还在使用面向对象的迭代器。 文章目录 1. 动机(Motivation)2. 模式定义3. Iterator 迭代器代码分析4. 面向对象的迭代器与泛型编程实现…

基于MFC的串口通信(Mscomm)

1、串口通信的概述: 串口是一种重要的通信资源,例如鼠标口、USB接口都是串口。串行端口是CPU和串行设备间的编码转换器。当数据从CPU经过端口发送出去的时候,字节数据会被转为串行的位,在接收数据时,串行的位被转换为…

用Visual Studio(VS)开发UNIX/Linux项目

目录 FTP是免不了的 正确设置头文件 组织项目结构 创建何种项目类型 FTP自动上传 大部分具有Windows开发经验的程序员会比较喜欢使用Visual Studio,而大部分Unix/Linux程序员则喜欢使用UltraEdit直接在主机上写代码。 为什么直接在主机上写代码呢,因…