位置: 编程技术 - 正文

Python装饰器实现几类验证功能做法实例

编辑:rootadmin

推荐整理分享Python装饰器实现几类验证功能做法实例,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

最近新需求来了,要给系统增加几个资源权限。尽量减少代码的改动和程序的复杂程度。所以还是使用装饰器比较科学

之前用了一些登录验证的现成装饰器模块。然后仿写一些用户管理部分的权限装饰器。

比如下面这种

调用权限的时候很好理解。直接仿写admin_required的格式就好了。然后每个页面入口用语法糖这样写: @admin_required

于是页面的入口权限就做好了。但是资源权限和页面权限不同。上面内容中提到的permission是写在model.py的静态内容里面的。

从封装来看,至少是看不出来哪个地方暴露了用户查询的方法(菜鸟水平下)。只能简单的看出来if判断的时候似乎使用了current_user这个变量的内置方法

但是current_user其实是一个第三方的包的内容,和登录模块引入的包相同,是一整套记录token信息的代码。详细内容太多。从这个地方出发去写,会go die

因为哪怕我知道其实调用的.can(permission)是model类里面定义的类方法。可是current_user是取了哪个部分的东西还是不清楚。

所以不管它。从头来梳理一下装饰器的内容。

首先一个简单的装饰器写法是很好理解的。比如原函数是这样写的:

这当然是随便写的一个函数(明显有很多问题),只是用来表达一个过程。首先通过路由调用这个函数的时候,会先执行第一个if判断。这个判断即我们想要的验证内容

验证通过以后,说明用户可以访问这个页面,然后页面内容会渲染出来,交互功能也被允许……

那么装饰器,就是把这个if的功能提取出来了。那么原函数写成这样的形式:

Python装饰器实现几类验证功能做法实例

单从这个函数来说,这样写并没有任何好处,似乎本来一行代码搞定的问题,多用了几行代码。我们展开这个形式的完整代码看一下:

上面的装饰器只是把page=admincheck这一句写成了@模式。

但是这种写法只能解决最基本的验证问题。也就是相对独立的入口验证。这个验证还没有拿到程序传递到page()函数当中的参数。也就是说,这个验证这么看起来没什么用处

不过机制是这样。接下来就可以研究怎样的做法是把路由传递过来的请求数据进行验证然后继续执行的了。

同样的,多个参数的时候,只需要把 def inner(arg)改写成def inner(arg1,arg2)

n个参数的时候,则写成def inner(*args,**kwargs) 这个需要注意一下。*args是元组,即('user',1);**kwargs是字典,即{'user':1}

同时写这两个形参的话,基本上就能处理所有传递进来的参数类型了。

当然。除此以外还有更复杂的装饰器写法。不过能处理传递过来的参数并且不影响被装饰函数的正常执行。基本上实现了之前的功能。

那么回过头来看示例当中的写法。最外层使用def permission_required(permission): 的意义,显然是想要实现复用。

上面的(permission)形参显然对应permission_required(Permission.SMY)中(Permission.SMY)这个参数。把这个参数的形参传递到方法体内部

这也是为什么要在装饰器decorator(f)外面再嵌套一层函数的原因——实现复用

于是之前这个写法的内容就很清晰了

这样差不多就结束了。如果有人想补充,欢迎留言。

以上这篇Python装饰器实现几类验证功能做法实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持积木网。

Python进阶-函数默认参数(详解) 一、默认参数python为了简化函数的调用,提供了默认参数机制:defpow(x,n=2):r=1whilen0:r*=xn-=1returnr这样在调用pow函数时,就可以省略最后一个参数不写:prin

Python字符串处理实例详解 Python字符串处理实例详解一、拆分含有多种分隔符的字符串1.如何拆分含有多种分隔符的字符串问题:我们要把某个字符串依据分隔符号拆分不同的字段

Python 迭代器与生成器实例详解 Python迭代器与生成器实例详解一、如何实现可迭代对象和迭代器对象1.由可迭代对象得到迭代器对象例如l就是可迭代对象,iter(l)是迭代器对象In[1]:l=[1,2,

标签: Python装饰器实现几类验证功能做法实例

本文链接地址:https://www.jiuchutong.com/biancheng/375484.html 转载请保留说明!

上一篇:如何用itertools解决无序排列组合的问题(itertools.permutations)

下一篇:Python进阶-函数默认参数(详解)(python函数菜鸟教程)

  • 差额税征收标准
  • 证券交易印花税税率是多少
  • 销售费用福利费编码
  • 对公账户转个人账户
  • 企业所得税准予扣除
  • 房地产企业营改增前都交那些税
  • 个人投资者取得现金红利的过程不用支付利息税
  • 境内企业向境外放款额度最长放款期限为两年
  • 一般纳税人初次购入税控系统的分录怎么做
  • 个人经营贷款利率是多少
  • 个人缴纳工会会费比例
  • 自产产品用于捐赠的会计处理
  • 将外购商品作为非货币性
  • 行政单位办公室主任必须是党员吗
  • 北京建筑施工企业排名
  • 什么叫记载资金的账簿
  • 合伙企业投资需要缴纳印花税吗
  • 红字发票勾选平台里有吗
  • 农产品增值税免税政策
  • 资本公积转增资本时应注意的问题主要包括哪些?
  • 主营业务收入会计分录怎样写
  • 没有金税盘怎么勾选发票
  • 收到小额支付转账什么意思
  • 不能取得发票的财务费用怎么做明细好一点
  • PRISMSTA.EXE - PRISMSTA是什么进程 有什么用
  • 如何修改电脑默认打印机
  • 鸿蒙 功能
  • 金税盘技术维护费可以抵扣吗
  • 政府补助收入的开支怎么做账
  • windows 11什么时候
  • php数据库语句
  • 销售商品取得的货款
  • 酒店里用了收费的东西怎么算
  • 在建工程盘盈计入什么
  • 亚美尼亚格加尔德修道院
  • 公司亏损注销了怎么处理
  • 员工内部罚款能不能抵扣个税
  • 三方债权债务抵销
  • 金蝶系统采购发票
  • 开票品名不一样有什么关系
  • MySQL中Distinct和Group By语句的基本使用教程
  • 工程材料税票怎样抵税
  • 个人股权转让需要评估吗
  • 研发费用辅助账怎么做
  • 差旅费属于什么支出类型
  • 收到政府的资本公积可以投入子公司吗
  • 出口转内销会计分录举例
  • 本月只有进项税没有销项税需要结转吗
  • 搬迁所得
  • 客户退货,但不退货
  • 主营业务成本和管理费用的区别
  • 库存商品盘点流程
  • 会计凭证后面需要打勾的是
  • 期初数据根据总账还是明细账
  • 收到现金货款存入银行会计分录
  • 无发票 入账
  • win8系统安装WPS
  • ubuntu14.04下apt-get install的报错以及解决方法
  • linux@ubuntu
  • ubuntu 20.04桌面
  • 4G内存时linux的mtrr表不正确的解决
  • mac如何设置wifi热点
  • win7系统显卡驱动在哪个文件夹
  • win8系统怎么安装软件
  • win8系统关机后电脑一直运行
  • window10耳机有电流
  • unity 移动应用开发
  • gitlab管理员账号 审批
  • Android使用领域
  • How to embed a jframe in an eclipse view
  • [置顶]马粥街残酷史
  • html淘宝搜索框代码
  • linux中切换目录命令符
  • Linux中获取某个进程的系统调用以及参数(故障排查案例)
  • vbs以管理员权限运行
  • python3利用smtplib通过qq邮箱发送邮件方法示例
  • python文件操作方法
  • 内蒙古电子税务局app官方下载
  • 济南税务局投诉电话多少
  • 江苏省人大有信访工作吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设