zoukankan      html  css  js  c++  java
  • 一些作业

    1:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),

       要求登录成功一次,后续的函数都无需再输入用户名和密码

     1 def wrapper(func):
     2     def inner(*args,**kwargs):
     3         print('欢迎加入我们的网站!')
     4         func()
     5         print('点击此链接跳转!')
     6     return inner
     7 
     8 @wrapper
     9 def register():
    10     with open('user_file', mode='r+',encoding='utf-8') as f:
    11         f.write('{} {}'.format(username,password))
    12 
    13 @wrapper
    14 def log_in():
    15      with open('user_file',mode='r',encoding='utf-8') as f1:
    16         user_data = f1.readline()
    17      i = 1
    18      while i <= 3:
    19          usn = input('请输入您的用户名:')
    20          pwd = input('请输入您的密码:')
    21          if user_data.split()[0].strip() == username and user_data.split()[1].strip() == pwd:
    22              print('Welcome!')
    23              break
    24          else:
    25              print('用户名或密码错误,请再输入一次您的用户名和密码!您还有{}次输入机会'.format(3-i))
    26              i += 1
    27              continue
    28 
    29 
    30 username = input('请输入您注册的用户名:')
    31 password = input('请输入您的注册用户名密码:')
    32 register()
    33 log_in()

    官方答案:

     1 FLAG = False                      #为了使后续的函数都无需再输入用户名和密码
     2 def login(func):
     3     def inner(*args,**kwargs):
     4         global FLAG
     5         if FLAG == True:
     6             ret = func(*args,**kwargs)                   #func是被装饰的函数
     7             return ret
     8         else:
     9             username = input('>>>username:')
    10             password = input('>>>password:')
    11             if username == 'xzb' and password == '123456':
    12                 FLAG = True
    13                 ret = func(*args,**kwargs)                 #func是被装饰的函数
    14                 return ret
    15             else:
    16                 print('登录失败!')
    17     return inner
    18 
    19 @login
    20 def shoplist_add():
    21     print('增加一件商品!')
    22 
    23 @login
    24 def shoplist_del():
    25     print('删除一件商品!')
    26 
    27 shoplist_add()
    28 shoplist_del()

    2.编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件

     1 def log(func):
     2     def inner(*args,**keargs):
     3         with open('log',mode='a',encoding='utf-8') as f:
     4             f.write(func.__name__+'
    ')              #func.__name__获取函数名字
     5         ret = func(*args,**keargs)
     6         return ret
     7     return inner
     8 
     9 @log
    10 def shoplist_add():
    11     print('增加一件商品!')
    12 
    13 @log
    14 def shoplist_del():
    15     print('删除一件商品!')
    16 
    17 shoplist_add()
    18 shoplist_del()

    3.编写下载网页的函数,要求功能时:用户传入一个url,函数返回下载页面的结果,

    如果文件内有值,就优先从文件中读取网页内容,否则就去下载

     1 import os
     2 from urllib.request import urlopen
     3 def cache(func):
     4     def inner(*args,**kwargs):
     5         if os.path.getsize('web_cache'):        #os.path.getsize()判断内容是否为空
     6             with open('web_cache','rb') as f:
     7                 return f.read()
     8         ret = func(*args,**kwargs)
     9         with open('web_cache','wb') as f:
    10             f.write(b'******'+ret)        #这个地方要注意,ret是bytes类型,所以前面加的字符串也要是bytes类型
    11         return ret
    12     return inner
    13 
    14 @cache
    15 def get(url):
    16     code = urlopen(url).read()
    17     return code
    18 
    19 ret = get('http://www.baidu.com')
    20 print(ret)
    21 ret = get('http://www.baidu.com')  ##
    22 print(ret)
  • 相关阅读:
    centos7安装ImageMagick
    php安装imagemagick扩展
    php编译安装redis扩展
    springboot和springsecurity使用JWT令牌
    springboot和springsecurity整合OAuth2
    SpringSecurity 整合SpringBoot结合jwt与rsa实现分布式认证授权
    【名额有限】云开发AI拓展能力等你来体验!
    干货:如何借助小程序云开发实现小程序支付功能(含源码)
    云开发数据库又增新技能!
    聚焦“云开发圆桌论坛”,大前端Serverless大佬们释放了这些讯号!
  • 原文地址:https://www.cnblogs.com/rcat/p/9343681.html
Copyright © 2011-2022 走看看