Python-23_装饰器-04_练习---无参装饰器、有参装饰器,,一、无参装饰器:京东
Python-23_装饰器-04_练习---无参装饰器、有参装饰器,,一、无参装饰器:京东
一、无参装饰器:
京东后端程序简写,并加上验证功能:
编写一个装饰器,提供验证功能:
# 用户信息表:user_list=[ {‘name‘:‘new1‘,‘passwd‘:‘123‘}, {‘name‘:‘new2‘,‘passwd‘:‘123‘}, {‘name‘:‘new3‘,‘passwd‘:‘123‘}, {‘name‘:‘new4‘,‘passwd‘:‘123‘},]dic = {"username": None, "login": False} # 定义一个全局变量 记录当前用户的状态def verify(func): def foo(*args, **kwargs): if dic["username"] and dic["login"]: # 判断:如果全局变量存在,执行这一步 res = func(*args, **kwargs) return res username = input("用户名:").strip() password = input("密码:").strip() for user_dic in user_list: if username == user_dic["name"] and password == user_dic["passwd"]: dic["username"]=username # 全局变量重新赋值 dic["login"]=True res = func(*args, **kwargs) return res else: print("用户名或密码错误") return foo# 1、定义欢迎进入京东界面:@verifydef index(): print("欢迎光临京东购物") return "请尽情放纵吧!!"# 2、定义购物车:@verifydef shopping_cart(product): print("这是您所想购买的物品 %s,如有需要,清下单哦" % product)# 3、定义订单信息:@verifydef order(): print("这是你以下订单详细信息")res = index()print(res)shopping_cart("奶茶")order()
问题:调用一个函数 要输入一次验证,调用一个函数 要输入一次验证,不正常
解决:第一登陆后,保存状态,以供后续函数使用(定义一个全局变量)
二、有参装饰器:
# 用户信息表:user_list=[ {‘name‘:‘new1‘,‘passwd‘:‘123‘}, {‘name‘:‘new2‘,‘passwd‘:‘123‘}, {‘name‘:‘new3‘,‘passwd‘:‘123‘}, {‘name‘:‘new4‘,‘passwd‘:‘123‘},]dic = {"username": None, "login": False} # 定义一个全局变量 记录当前用户的状态def auth(auth_type="filedb"): # 在原本无参装饰器外、再嵌套一个函数 def verify(func): def foo(*args, **kwargs): print("认证类型",auth_type) if auth_type=="filedb": # 判断认证类型 if dic["username"] and dic["login"]: # 判断:如果全局变量存在,执行这一步 res = func(*args, **kwargs) return res username = input("用户名:").strip() password = input("密码:").strip() for user_dic in user_list: if username == user_dic["name"] and password == user_dic["passwd"]: dic["username"]=username # 全局变量重新赋值 dic["login"]=True res = func(*args, **kwargs) return res else: print("用户名或密码错误") elif auth_type=="1111": print("认证类型是1111,执行此操作") else: print("认证类型是别的种类,执行此操作") res = func(*args, **kwargs) return res return foo return verify# 1、定义欢迎进入京东界面:@auth(auth_type="filedb") # verify = auth(auth_type="filedb")---->@verifydef index(): print("欢迎光临京东购物") return "请尽情放纵吧!!"# 2、定义购物车:@auth(auth_type="filedb")def shopping_cart(product): print("这是您所想购买的物品 %s,如有需要,清下单哦" % product)# 3、定义订单信息:@auth(auth_type="1111")def order(): print("这是你以下订单详细信息")res = index()print(res)shopping_cart("奶茶")order()
问题:调用一个函数 要输入一次验证,调用一个函数 要输入一次验证,不正常
解决:第一登陆后,保存状态,以供后续函数使用(定义一个全局变量)
Python-23_装饰器-04_练习---无参装饰器、有参装饰器
相关内容
- Python中单引号,双引号,三个单引号,外双单引号内双
- [building block] merge sort @ Python,mergepython,Here is th
- python实现列表中各元素的拼接,python拼接,功能要求:
- python报错ImportError: [joblib] Attempting to do parallel computing
- python批量启动关闭程序,,#!/usr/bin
- python ---求100以内的质数有哪些,,#coding=ut
- PYTHON访问数据库,,PYTHON DB
- Python内置函数(27)——hasattr,,英文文档:hasat
- Python 3.6 安装后需要安装的常用 {控件}?,python3.6
- python改文件名,python文件名,import os
评论关闭