首页 > 其他分享 >01 装饰器的使用

01 装饰器的使用

时间:2023-12-04 14:35:48浏览次数:31  
标签:01 函数 auth01 func 使用 执行 装饰 auth02

装饰器实现登录验证

在一个web项目中,很多接口需要用户必须是登录状态,否则就应该跳转到登录页面,这个可以通过装饰器实现。
在实现之前,我们必须弄清除两个问题

装饰器执行先后的问题

可以看到装饰器在函数被加载的时候就执行了,先执行的最下层的装饰器,再执行的上层的装饰器,这像什么呢?

函数的嵌套调用。
装饰器其实就是把函数当做参数传递给装饰器罢了,外层函数执行需要等待内层函数执行完了才能执行。
auth01 虽然先接受一个函数作为参数,但是这个参数还没定性,无法执行内部的装饰代码,于是继续执行auth02 的装饰代码,装饰最底层的 func,于是func先被auth02装饰了一遍,得到一个新的func,继续交给auth01装饰,得到最终的结果,于是有了 先打印 auth02, 后打印 auth01.

于是在flask中,我们想写个登录装饰器auth,他必须在 app.route 下方添加。

edit先经过修饰,功能得到加强,再被flask注册到路由之中。

装饰器装饰之后的函数名问题

因为被装饰之后,原func被改名了,叫做 inner, 于是出现了路由注册冲突

这样就可以是函数名保持不变,解决路由注册冲突。

标签:01,函数,auth01,func,使用,执行,装饰,auth02
From: https://www.cnblogs.com/yaowy001/p/17874829.html

相关文章

  • ESXI6.0怎样使用web登陆
    在一次巡检发现Esxi主机证书快要过期了,准备刷新证书的时候才发现,Esxi6.0主机默认是没有开启web管理界面的,通过web访问,只有vSphere下载,没有openwebclient。在网上找了不少资料才发现,原来Esxi6.0使用web界面需要先安装对应的插件才行。如果可以联网,则开启SSH后可以直接安装先......
  • SQLServer 性能报表的学习与使用
    SQLServer性能报表的学习与使用背景前面连续学习了SQLServer如何优化等事宜.但是一开始总是么有找到对应的问题解决思路周天时想到了SQLSERVER的MDW工具但是并没有找到一个合适的处理方式和方法.今天突然发现可以使用部分核心报表功能进行问题定位.所以想着总结一下,......
  • wpf学习 Prism 使用入门
    一、手动添加安装包Prism.DryIocapp.xaml.cs修改继承基类为:PrismApplication实现其中的抽象成员:CreateShell用于指定启动的窗口类1publicpartialclassApp:PrismApplication2{3protectedoverrideWindowCreateShell()4{5......
  • js获取时间戳转化成日期格式的直接使用和封装
     一、在页面中直接使用1. 通过模板字符串使用:{{times}}2. 定义变量存放时间:data(){return{times:"",};},3. 在mounted()方法里调用:mounted(){constdate=newDate();constY=date.getFullYear();constM=date.getMonth()+1<10?"0"......
  • 在NET8中使用简化的 AddJwtBearer 认证
    开发环境系统版本:win10.NETSDK:NET8开发工具:vscode参考引用:使用dotnetuser-jwts管理开发中的JSONWeb令牌注意:以下示例中的端口、token等需替换成你的环境中的信息创建项目运行以下命令来创建一个空的Web项目,并添加Microsoft.AspNetCore.Authentication.JwtBea......
  • Servlet Session基本概念和使用方法,获取Session对象: 在Servlet中,可以使用HttpServletR
    ServletSession基本概念和使用方法,获取Session对象:在Servlet中,可以使用HttpServletRequest对象的getSession()方法来获取当前请求的Session对象目录Session介绍Session使用步骤Session示例LoginServletsuccess.jspfailure.jspSession介绍Session是Web开发中的一种机......
  • 嵌入式Linux: 使用Cmake交叉编译tslib库
    在编译第三方库时,往往要指定头文件和库的链接地址,每次输入又比较麻烦,所以产生了是否能用Cmake交差编译嵌入式Linux的想法,经过实验确实可行,以下记录操作过程。一、新建项目项目目录如下:arm_build:安放交叉编译生成的文件 build:安放gcc编译生成的文件 arm_linux_setup.cmake......
  • Java泛型的定于与使用
    Java泛型的定于与使用泛型也叫泛类型。Java中可以声明泛型的地方。泛型的分类:泛型类:在类的定义时,声明泛型泛型接口:在接口的定义时,声明泛型泛型方法:在类的方法上声明泛型一、泛型类1、语法className<T1,T2,...,Tn>{//}/**T代表一个Java类,在类上声明......
  • Arcpy使用入门
    2.7Python(目前ArcGIS使用)代码转化为3.5Python(目前ArcGISPro使用)代码----AnalyzeToolsForPro(2to3命令)基本操作调用ArcToolbox的两种形式#arcpy.ToolboxAlias.ToolName()#arcpy.ToolName_ToolboxAlias()#ToolboxAlias工具箱别名#ToolName工具名称arcpy.analysis.B......
  • python 属性装饰器和对应的setter方法,属性的封装和安全性控制
    当我们在类中定义属性时,通常希望能够对属性的读取和写入进行控制,以确保数据的完整性和安全性。属性装饰器和对应的setter方法提供了一种实现属性封装和安全性控制的方法。属性装饰器是Python的一种语法特性,用于修饰类的方法,使其表现为一个属性而不是一个普通的方法。通过使用属性......