python----------装饰器应用练习

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python----------装饰器应用练习相关的知识,希望对你有一定的参考价值。

1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),
要求登录成功一次,后续的函数都无需再输入用户名和密码
注意:从文件中读出字符串形式的字典,可以用eval(‘{"name":"egon","password":"123"}‘)
转成字典格式
技术分享
 1 定义一个字典看用户登录状态
 2 auth_status={
 3     user:None,
 4     status:False#状态是没有登录
 5 }
 6 def wrapper(fun):
 7     def inner(*args,**kwargs):
 8         if auth_status[status]:#如果登录了,就执行fun函数
 9             ret = fun(*args, **kwargs)  # index/home
10             return ret
11         else:#如果没有登录,就实现认证功能
12             username = input(name:>>).strip()#获取用户名
13             password = input(password:>>).strip()#获取密码
14             f=open(login.txt,r,encoding=utf-8)#打开文件获取用户的信息
15             user_dic=f.read()#读出来的是字符串类型
16             zhddict=eval(user_dic)#转换成字典类型
17             #print(type(zhddict))#查看eval转换后的类型
18             if zhddict.get(username) and password == zhddict[username]:#如果用户名和密码都正确,就显示登陆成功,不正确就显示登录失败
19                 print(login successful)
20                 auth_status[user]=username #登陆成功后就把用户名放在user里
21                 auth_status[status]=True    状态改为True
22                 ret = fun(*args,**kwargs)#index/home
23                 return ret
24             else:
25                 print(login faild)
26     return inner
27 @wrapper #语法糖
28 def index():
29     print("欢迎来到首页")
30 
31 @wrapper
32 def home():
33     print("欢迎回家")
34 
35 index()
36 index()
37 home()
38 index()
View Code

2.编写下载网页内容的函数,

要求功能是:用户传入一个url,函数返回下载页面的结果

编写装饰器,实现缓存网页内容的功能:

具体:实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),就优先从文件中读取网页内容,

否则,就去下载,然后存到文件中


技术分享
 1 from urllib.request import urlopen
 2 url_l=[]#存放
 3 def huancun(func):
 4     ‘‘‘
 5         实现缓存网页内容的功能
 6     ‘‘‘
 7     def inner(*args,**kwargs):#args传的就是url,那么得到url就得用url = args[0]
 8         url = args[0]  # 取url
 9         filename=str(hash(url))#用hash算法吧url转换为数字作为文件名,但是数字不能作为文件名,必须转换成str类型
10         if url in url_l:#如果url已经在列表里了,就说明你已经下载过了,就不需要在执行func了,就直接打开就行了
11             f=open(filename,rb)
12             ret=f.read()
13         else:#如果不在列表里就要把添加到url列表
14             url_l.append(url)
15             ret = func(*args, **kwargs)
16             f=open(filename,wb)#打开文件
17             f.write(ret)#并且用写的方式把它写进文件里
18         f.close()
19         return ret
20     return inner
21 
22 
23 @huancun#get=huancun(get)
24 def get(url):#定义一个get函数
25     return urlopen(url).read()#返回读取的网页
26 print(get(http://www.people.com.cn))
27 print(get(http://www.people.com.cn))#调用get方法,传一个‘http://www.people.com.cn‘网址进去
28 print(get(http://www.people.com.cn))
View Code

 

 




以上是关于python----------装饰器应用练习的主要内容,如果未能解决你的问题,请参考以下文章

python装饰器练习

python--------------装饰器练习

python装饰器练习

Python关于装饰器的练习题

python三大器之装饰器的练习

python3练习-装饰器