多层装饰器

 #首先我们先实现一个简单的登陆与权限验证功能,注意看执行结果
USER_INFO = {} def check_login(func):
def inner(*args,**kwargs):
if USER_INFO.get('is_login',None):
ret = func(*args,**kwargs)
return ret
else:
print('请登录!')
return inner def check_admin(func):
def inner(*args,**kwargs):
if USER_INFO.get('user_type',None) ==2:
nnn = func(*args,**kwargs)
return nnn
else:
print('无权限查看')
return inner @check_login
@check_admin
def index():
print('index')
@check_login
def check_user():
print('Ok') def login():
user = input('请输入用户名!')
if user == 'alex':
USER_INFO['is_login'] = True
USER_INFO['user_type'] = 1
elif user == 'liguangxu':
USER_INFO['is_login'] =True
USER_INFO['user_type'] = 2 def main():
while True:
a=input('1、登陆 2、查看信息 3、查看管理员权限:')
if a == '':
login()
elif a== '':
check_user()
else:
index()
main()
#首先使用alex用户登录后我们设置他具有普通权限有查看你信息的权限,无查看管理员权限
>>>1、登陆 2、查看信息 3、查看管理员权限:1
>>>请输入用户名!alex
>>>1、登陆 2、查看信息 3、查看管理员权限:2
>>>Ok
>>>1、登陆 2、查看信息 3、查看管理员权限:
>>>无权限查看
#我们使用liguangxu用户继续登陆,赋给他管理员权限
>>>1、登陆 2、查看信息 3、查看管理员权限:1
>>>请输入用户名!liguangxu
>>>1、登陆 2、查看信息 3、查看管理员权限:3
>>>index
>>>1、登陆 2、查看信息 3、查看管理员权限:2
>>>Ok
#使用查看信息功能时只验证是否登陆,而查看管理员权限则不仅需要验证是否登陆后,还需要验证是否具有管理员权限
#两层装饰器,将check_admin以及index()函数当作参数传入check_login中,执行check_login函数体,遇到ret=func()执行check_admin以及index函数
#将index函数当作参数传入check_admin中执行函数体遇到nnn=func()执行index函数体
 

python-day5-装饰器第二弹之多层装饰器的更多相关文章

  1. 神经网络与机器学习 笔记—多层感知器(MLP)

    多层感知器(MLP) Rosenblatt感知器和LMS算法,都是单层的并且是单个神经元构造的神经网络,他们的局限性是只能解决线性可分问题,例如Rosenblatt感知器一直没办法处理简单异或问题.然 ...

  2. python day5 lambda,内置函数,文件操作,冒泡排序以及装饰器

    目录 python day 5 1. 匿名函数lambda 2. python的内置函数 3. python文件操作 4. 递归函数 5. 冒泡排序 6. 装饰器 python day 5 2019/ ...

  3. python 多层装饰器

    25.多层装饰器:      1.原理:执行顺序从上往下,#2和#3组成一个函数假设为nf1,#1和nf1组成一个函数nnf1           f1成为ck_ty_of_us的inner函数即nf ...

  4. python 装饰器 第十一步:多层装饰器的嵌套

    #第十一步:多层装饰器的嵌套 #装饰器1 def kuozhan1(func): #定义装饰之后的函数 def neweat1(): # 扩展功能1 print('1-----饭前洗手') # 调用基 ...

  5. python_way ,day5 模块,模块3 ,双层装饰器,字符串格式化,生成器,递归,模块倒入,第三方模块倒入,序列化反序列化,日志处理

    python_way.day5 1.模块3 time,datetime, json,pickle 2.双层装饰器 3.字符串格式化 4.生成器 5.递归 6.模块倒入 7.第三方模块倒入 8.序列化反 ...

  6. Flask框架视图多层装饰器问题

    Flask中的app.route装饰器 我们知道,在flask框架中,我们的路由匹配就是通过有参装饰器来实现的,我们看一个简单的例子: from flask import Flask, render_ ...

  7. python语法生成器、迭代器、闭包、装饰器总结

    1.生成器 生成器的创建方法: (1)通过列表生成式创建 可以通过将列表生成式的[]改成() eg: # 列表生成式 L = [ x*2 for x in range(5)] # L = [0, 2, ...

  8. python 装饰器(一):装饰器基础(一)装饰器形式,何时执行

    简介 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数). 装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象. 形式 假如有个名为 decorate 的装饰器: ...

  9. python函数之闭包函数与无参装饰器

    一.global与nonlocal #global x = 1 def f1(): global x # 声明此处是全部变量x x = 2 print(x) f1() # 调用f1后,修改了全局变量x ...

随机推荐

  1. 基于mllib的协同过滤实战(电影推荐)

    //加载需要的包 import org.apache.spark.rdd._ import org.apache.spark.mllib.recommendation.{ALS, Rating, Ma ...

  2. 页面中插入视频兼容ie8以上的浏览器

    有时候页面中需要插入视频,如果不考虑ie8的话:就是直接用h5标签<video></video>就可以了: 但是有的时候需求是需要考虑ie8,这样我们就可以用插件,这种vide ...

  3. IOS Window窗口使用

    // 程序启动完毕之后就会调用一次 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NS ...

  4. hdu-2066 一个人的旅行---模板题

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2066 题目大意: 求到目标点集合中的最短距离 解题思路: dijkstra算法求出每个点到该点的最短 ...

  5. python_13_break

    for i in range(5): print('-----------',i) for j in range(5): print(j) if j>2: break####结束当前循环

  6. Mac 系统 + Chrome浏览器 网页前端出现中文文字反转或顺序错乱

    问题背景 React开发的系统,收到一个BUG反馈,*"号个人统计"文字不正确,应为"个人号统计"*. 收到BUG后,打开浏览器查验是什么情况,难道犯了最基本的 ...

  7. java基础面试题:抽象类中是否可以有静态的main方法?

  8. linux分区之ext2,ext3,ext4,gpt

    linux分区之ext2,ext3,ext4,gpt 2013-07-10 12:00:24 标签:ext3 gpt 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明 ...

  9. ajax 的 promise

    $.when().done().fail() $.when($.ajax("test1.html"),$.ajax("test2.html")).done(fu ...

  10. 【CodeBase】PHP检查未知媒体文件的格式

    用法: <?php $filefullpath="F:/test/2awd45wr1e5fef5e5"; echo Format::check($filefullpath,[ ...