python-day5-装饰器第二弹之多层装饰器
多层装饰器
#首先我们先实现一个简单的登陆与权限验证功能,注意看执行结果
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-装饰器第二弹之多层装饰器的更多相关文章
- 神经网络与机器学习 笔记—多层感知器(MLP)
多层感知器(MLP) Rosenblatt感知器和LMS算法,都是单层的并且是单个神经元构造的神经网络,他们的局限性是只能解决线性可分问题,例如Rosenblatt感知器一直没办法处理简单异或问题.然 ...
- python day5 lambda,内置函数,文件操作,冒泡排序以及装饰器
目录 python day 5 1. 匿名函数lambda 2. python的内置函数 3. python文件操作 4. 递归函数 5. 冒泡排序 6. 装饰器 python day 5 2019/ ...
- python 多层装饰器
25.多层装饰器: 1.原理:执行顺序从上往下,#2和#3组成一个函数假设为nf1,#1和nf1组成一个函数nnf1 f1成为ck_ty_of_us的inner函数即nf ...
- python 装饰器 第十一步:多层装饰器的嵌套
#第十一步:多层装饰器的嵌套 #装饰器1 def kuozhan1(func): #定义装饰之后的函数 def neweat1(): # 扩展功能1 print('1-----饭前洗手') # 调用基 ...
- python_way ,day5 模块,模块3 ,双层装饰器,字符串格式化,生成器,递归,模块倒入,第三方模块倒入,序列化反序列化,日志处理
python_way.day5 1.模块3 time,datetime, json,pickle 2.双层装饰器 3.字符串格式化 4.生成器 5.递归 6.模块倒入 7.第三方模块倒入 8.序列化反 ...
- Flask框架视图多层装饰器问题
Flask中的app.route装饰器 我们知道,在flask框架中,我们的路由匹配就是通过有参装饰器来实现的,我们看一个简单的例子: from flask import Flask, render_ ...
- python语法生成器、迭代器、闭包、装饰器总结
1.生成器 生成器的创建方法: (1)通过列表生成式创建 可以通过将列表生成式的[]改成() eg: # 列表生成式 L = [ x*2 for x in range(5)] # L = [0, 2, ...
- python 装饰器(一):装饰器基础(一)装饰器形式,何时执行
简介 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数). 装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象. 形式 假如有个名为 decorate 的装饰器: ...
- python函数之闭包函数与无参装饰器
一.global与nonlocal #global x = 1 def f1(): global x # 声明此处是全部变量x x = 2 print(x) f1() # 调用f1后,修改了全局变量x ...
随机推荐
- php-7.1.11编译选项配置
./configure \ --prefix=/usr/local/php-7.1.11 \ --with-config-file-path=/usr/local/php7.1.11/etc \ -- ...
- newCoder在线编程---(1)
二维数组查找 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 1.暴 ...
- wordpress中一些喜欢的主题
Personal lite Bhari Blogi
- codeblocks winsock配置
在codeblocks进行Socket编程遇到如下情况: undefined reference to WSAStartup@8 解决方法: 右击工程,选择 build options,选择 Link ...
- frombuffer的用法
函数原型为:numpy.ma.frombuffer(buffer, dtype=float, count=-1, offset=0) import numpy s = 'hello world' pr ...
- java基础编程——树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目代码 /** * 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一 ...
- C#条件运算符(?:)
一.C#条件运算符(?:) 条件运算符(?:),有时也称为三元操作符“?:”.它是根据布尔型表达式的值返回?后面的两个值中的一个.如果条件为True,则计算第一个表达式并以它的计算结果为准:如果条件为 ...
- Arguments Optional-freecodecamp算法题目
Arguments Optional 1.要求 创建一个计算两个参数之和的 function.如果只有一个参数,则返回一个 function,该 function 请求一个参数然后返回求和的结果. 如 ...
- 二、Linux 系统启动过程
Linux 系统启动过程 linux启动时我们会看到许多启动信息. Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导. 运行 init. 系统初始化. 建立终端 ...
- goaccess 安装
今天尝试搭建goaccess,用于分析access.log文件,但安装并不顺利,小记一下自己遇到的问题及解决方法 系统环境:CentOS release 6.9 一.参照官网教程进行搭建 $ wget ...