高级装饰器---验证用户登录
需求
代码1、带函数返回值的装饰器:
1 def auth(func): 2 def wrapper(*args,**kwargs): 3 username = input("username:").strip() 4 password = input("password:").strip() 5 6 if user==username and passwd == password: 7 print("\033[32;1mUser has passed authentication\033[0m") 8 #func(*args,**kwargs) #没有返回值的时候用 9 #return func(*args,**kwargs) #如果函数在这里结束了,就可以return。 10 res = func(*args,**kwargs) #也可以赋值变量,然后做其他的修饰,最后在return返回。 11 print("the home is return: %s" % res) 12 return res #调用函数home时,可以返回值 13 else: 14 exit("\033[31;1mInvalid username or password\033[0m") 15 16 return wrapper 17 18 19 def index(): 20 print('welcome to index page') 21 22 @auth 23 def home(): 24 print('welcome to home page') 25 return "from home" #原代码中是有返回值的。 26 27 @auth 28 def bbs(): 29 print('welcome to bbs page') 30 31 32 index() 33 print(home()) #原代码可以继续调用函数的返回值 34 bbs()
多种权限认证
1、用一个函数体实现多种方式进行认证:
2、模拟本地用户名和密码和ldap用户认证密码:
1 #!/usr/bin/env python 2 # -*- coding:utf8 -*- 3 # Author:Dong Ye 4 5 6 import time 7 user,passwd = 'dy','asd' 8 #装饰器 9 def auth(auth_type): #定义一个装饰器标签函数,auth_type是装饰器的标签(auth_type = "local" & auth_type="ldap") 10 print("auth func:",auth_type) 11 def outer_wrapper(func): #定义接收@auth传过来的home的内存地址,并赋值给func 12 def wrapper(*args,**kwargs): #定义嵌套函数,做功能装饰home() & bbs(),并且home(args1) & bbs(args1)的参数会传到这里 13 #print("wrapper func args:",*args,**kwargs) 14 if auth_type == 'local': 15 username = input('username: ').strip() 16 password = input('password: ').strip() 17 if user == username and passwd == password: 18 print("\033[32;1mUser has passed authentication\033[0m") 19 return func(*args,**kwargs) #执行源代码home() & bbs(),并且home(args1) & bbs(args1)的参数会传到这里 20 else: 21 exit("\033[31;1mInvalid username or password\033[0m") 22 23 elif auth_type=='ldap': 24 print('是以ldap的方式登录') 25 return wrapper 26 return outer_wrapper 27 28 #注释: 29 #home----传参:内存地址和装饰器标签(local&ldap)----> auth(解封装),auth_type=装饰器标签 -----home的内存参数---->outer_warpper(解封装),func= home---->调用wrapper(*args,**kwargs)-->func函数func(*args,**kwargs)=home(*args,**kwargs) 30 #wrapper ----内存地址1---->outer_wrapper----内存地址1和2---->auth--内存地址(1、2)通过装饰器标签(local&ldap)---->home重新赋值 31 def index(): 32 print('welcome to index page') 33 34 #原代码 35 #home认证用本地认证 36 #auth_type = "local" 赋值给了auth(auth_type) 37 #@auth home = auth(outer_wrapper(func)) func = home 38 #通过高阶函数的功能将wrapper的内存地址返回给outer_wrapper 39 #最后将outer_wrapper的内存地址返回给auth函数,并重新赋值给home 40 @auth(auth_type = "local") 41 def home(): 42 print('welcome to home page') 43 return "from home" 44 45 46 #bbs用远程的ldap 47 @auth(auth_type="ldap") #bbs = auth(bbs) 48 def bbs(): 49 print('welcome to bbs page') 50 51 52 53 54 55 #原调用 56 index() 57 home() #其实执行的是通过wraooer、outer_warpper、auth返回的内存地址,找到wrapper函数体执行的 58 bbs()
转载于:https://www.cnblogs.com/abobo/p/8064671.html
高级装饰器---验证用户登录相关推荐
- 抽屉之Tornado实战(9)--装饰器实现用户登录状态验证
当然今天讲的验证,不只Tornado会用,以后用到web框架都会用到,最常见的场景就是只有用户登陆了才能执行某些操作,所以在执行这些操作前要先做登陆状态的验证. 比如:点赞,发布,评论等需要验证,都需 ...
- python用户登录(输入用户名和密码)dic_Python使用装饰器模拟用户登陆验证功能示例...
本文实例讲述了Python使用装饰器模拟用户登陆验证功能.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #!python3 user_list = [ {'name' ...
- 装饰器实现用户验证登录
在实现用户验证的登录的时候可以使用装饰器工厂产生装饰器,让装饰器得到参数,从而判断登录类型,并验证用户登录条件,代码实现如下: def login_type(type):def Outer(F):de ...
- MVC4验证用户登录特性实现方法
在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要:// 表示一个特性,该特性用于限制调用方对操作方法的访问.[AttributeUsage(Attribute ...
- MVC4项目中验证用户登录一个特性就搞定
在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性.// 摘要:// 表示一个特性,该特性用于限制调用方对操作方法的访问.[AttributeUsage(AttributeT ...
- vue router.beforeEach跳转路由验证用户登录状态
使用vue判断验证用户登录状态 导航钩子类似于生命周期钩子,包含路由进入前,进入后,更新时,退出前等几个周期,主要用于控制导航的前进后退或跳转等. 其中router.beforeEach就是路由进入前 ...
- web实验新浪邮箱、下拉小说列表、验证用户登录
html.css.js 新浪邮箱 下拉小说列表 验证用户登录 新浪邮箱 1.制作以下的新浪 邮箱登录界面: 要求: 1)首先给文本框制作细边框样式,当鼠标放在文本框上时,输入框的边框颜色发生变化,当鼠 ...
- Asp.Net使用加密cookie代替session验证用户登录状态 源码分享 欢迎拍砖
小论坛地址: http://rayyu.5d6d.com/thread-9444-1-1.html 正文: 首先 session 和 cache 拥有各自的优势而存在. 他们的优劣就不在这里讨论了. ...
- ASP.NET MVC使用Authorize过滤器验证用户登录
ASP.NET MVC使用Authorize过滤器验证用户登录.Authorize过滤器首先运行在任何其它过滤器或动作方法之前,主要用来做登录验证或者权限验证. 示例:使用Authorize过滤器实现 ...
- Spring MVC拦截器实现用户登录权限验证案例
本节将通过拦截器来完成一个用户登录权限验证的 Web 应用 springMVCDemo07,具体要求如下:只有成功登录的用户才能访问系统的主页面main.jsp,如果没有成功登录而直接访问主页面,则拦 ...
最新文章
- tensorflow2:tf.app.run()
- Swift字符串基本操作(三)
- 图像处理之基础---仿射变换
- 爬虫1_python2
- 信息学奥赛一本通 1069:乘方计算 | OpenJudge NOI 1.5 13
- dj鲜生-21-模板抽离-用户中心的父模板页制作-二级base_no_cart与三级base_user_center
- 发布Drools Workbench到Tomcat on Linux
- 利用JAVA计算TFIDF和Cosine相似度-学习版本
- ORB_SLAM3在ubuntu18.04安装和初步测试+轨迹评估
- php过滤4字节的字符串,过滤utf8 字符中超过三个字节的字符,或者非utf8字符
- 机器人(机械臂)动力学建模方法(Euler-Lagrange equation)
- FastReport产品介绍及免费下载地址
- linux每个phy一个接口,mdio
- Python和C语言运行速度对比(累加1亿次)
- 夜深人静了,我们来学学分布式锁
- 基于CST电磁仿真软件的7-10GHz的微带带通滤波器的设计
- 最佳学习方法(10)学习方法介绍
- virt-manager 管理KVM虚拟机
- Windows10 系统部分软件字体虚化不清晰
- SPS PDSCH的HARQ反馈
热门文章
- js默认点击一次_JavaScript初学者,一个小小的点击案例。
- sa结构组网方式_5G建网:先NSA还是SA?
- focal loss dice loss源码_扒源码:sharding loss in Pytorch
- Elasticsearch官档翻译——1 4 修改数据
- 传统城域网架构遇瓶颈 引入NFV成有效解法
- C# winfrom gridview全部选择和全部取消
- linux(ubuntu) 查看系统设备信息
- Subversion for Windows 相关工具
- [转载] 非诚勿扰2
- javascript实现的时钟