Python进阶装饰器面试题,你会做吗

北京医院皮肤病治疗 http://m.39.net/pf/a_6171978.html

题目

#现已实现以下功能my_log、my_name、my_shopping_mall函数#要求编写装饰器,为my_log、my_name、my_shopping_mall函数加上认证的功能,要求登录成功一次,后续的函数都无需再输入用户名和密#码#账户名密码来自字典变量#补充知识:token#token的意思是“令牌”,是服务端生成的一串字符串(这里我们可以随意指定一个字符串),作为客户端进行请求的一个标识。#当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token来请求数据即可,无需再次带上#用户名和密码user_dict={#存用户名和密码"user1":"","user2":"",}defmy_log():print(thisismy_log)defmy_name(name):print(欢迎登陆,name)defmy_shopping_mall():print("商城购物")whileTrue:choose_num=input("\n\n1、查看日志\n2、我的信息\n3、我的商城\n请输入操作选项(输入q退出)")ifchoose_num=="q"orchoose_num=="Q":breakelifchoose_num=="1":my_log()elifchoose_num=="2":my_name("张三")elifchoose_num=="3":my_shopping_mall()else:print("输入不合法")自己做一遍再看后面的答案哦!!!自己做一遍再看后面的答案哦!!!自己做一遍再看后面的答案哦!!!

答案

importuuiduser_dict={#存用户名和密码"user1":"","user2":"",}token=""defauth(func):defwrapper(*args,**kwargs):globaltoken#涉及到全局变量的修改,所以需要声明引用全局变量iftoken:#token有效func(*args,**kwargs)else:#token无效name=input(请输入你的用户名:).strip()password=input(请输入你的密码:).strip()ifnameinuser_dictanduser_dict[name]==password:func(*args,**kwargs)token=str(uuid.uuid4()).replace("-","",-1)#uuid.uuid4()可以生成一个随机的uuid字符串,然后我们去掉-#print(token)else:print("输入的账户不存在")returnwrapper

authdefmy_log():print(thisismy_log)

authdefmy_name(name):print(欢迎登陆,name)

authdefmy_shopping_mall():print("商城购物")whileTrue:choose_num=input("\n\n1、查看日志\n2、我的信息\n3、我的商城\n请输入操作选项(输入q退出)")ifchoose_num=="q"orchoose_num=="Q":breakelifchoose_num=="1":my_log()elifchoose_num=="2":my_name("张三")elifchoose_num=="3":my_shopping_mall()else:print("输入不合法")添加小唐老师



转载请注明地址:http://www.sanbaicaoasb.com/sctx/8527.html
  • 上一篇文章:
  • 下一篇文章: 没有了
  • 热点文章

    • 没有热点文章

    推荐文章

    • 没有推荐文章