用装饰器做一个登陆功能(进阶):

 1 dic = {
 2     ‘username‘:None,
 3     ‘status‘:False
 4 }
 5 def login(flag):     #  传入 ‘微信‘,‘QQ‘
 6     def wrapper(f):
 7         def inner(*args,**kwargs):
 8             if dic[‘status‘] == True:
 9                 ret = f()
10                 return ret
11             else:
12                 i = 0
13                 while i < 3:
14                     username = input(‘请输入你的%s账号:‘ % (flag)).strip()
15                     password = input(‘请输入你的%s密码:‘ % (flag)).strip()
16                     with open(‘login_msg‘,encoding=‘utf-8‘) as f1:
17                         content = eval(f1.readline())   #eval() 将文件中的内容直接取出赋值给content
18                         if username == content[flag][‘username‘] and password == content[flag][‘password‘]:  #falg 的目的就是接受传入的内容是‘微信‘还是‘QQ‘
19                             print(‘登陆成功‘)
20                             dic[‘username‘] = username
21                             dic[‘status‘] = True   #改变状态
22                             ret = f()
23                             return ret
24                         else:
25                             print(‘你输入的账号或密码错误,你还有%d次机会,请重新输入...‘ % (2-i))
26                             i += 1
27         return inner
28     return wrapper
29 @login(‘微信‘)
30 def taobao_home():
31     print(‘淘宝首页‘)
32 @login(‘微信‘)
33 def taobao_shop():
34     print(‘淘宝商城‘)
35 @login(‘qq‘)
36 def jingdong_home():
37     print(‘京东首页‘)
38 @login(‘qq‘)
39 def jingdong_shop():
40     print(‘京东商城‘)
41
42 choice_list = {          #定义一个choice_list 用数字作key 函数名作值。
43     1:taobao_home,
44     2:taobao_shop,
45     3:jingdong_home,
46     4:jingdong_shop
47 }
48
49 while True:
50     print(‘1\t淘宝首页\n2\t淘宝商城\n3\t京东首页\n4\t京东商城‘)   #循环打印四个内容
51     choice = input(‘请输入你的选项:‘).strip()
52     if choice.isdigit():
53         choice = int(choice)
54         if  0 < choice <= len(choice_list):
55             choice_list[choice]()   #  通过选择的数字 执行相应的函数
56         else:
57             print(‘你输入的不在选项范围内,请重新输入...‘)
58     else:
59         print(‘你输入的不是数字,请重新输入...‘)

原文地址:https://www.cnblogs.com/stfei/p/8710785.html

时间: 2024-10-10 02:59:05

用装饰器做一个登陆功能(进阶):的相关文章

java web程序 上机考试做一个登陆注册程序

大二期末 java web.用到数据库,jdbc.myeclipse实现用户的注册,登陆 并且不能出现500错误,用户不能重复注册.当用户任意点击时也不能出现500错误! 这里.我只写注册成功的页面.这个不让用户重复注册 当时老师对我各种扣分.可后来.我问他的时候,他说不出来.我不是那个第一个提交作业的学生,可我的分数却比他低,我的功能比他多一个好吧 无所谓啊  谁叫我那么背时,再也不想问了.特别烦躁了 registerOk.jsp <body> <% String name=reque

如何用python的装饰器定义一个像C++一样的强类型函数

Python作为一个动态的脚本语言,其函数在定义时是不需要指出参数的类型,也不需要指出函数是否有返回值.本文将介绍如何使用python的装饰器来定义一个像C++那样的强类型函数.接下去,先介绍python3中关于函数的定义. 0. python3中的函数定义 举个例子来说吧,比如如下的函数定义: 1 def fun(a:int, b=1, *c, d, e=2, **f) -> str: 2 pass 这里主要是说几点与python2中不同的点. 1)分号后面表示参数的annotation,这个

对Python中装饰器(Decorator)的理解与进阶

有时候我们项目中的某些功能做些修改即需要对内部的某些函数添加一些附加功能,但是为了安全起见不想改变函数的源代码以及函数的调用方式,那么装饰器在这个地方会给我们带来很大的帮助. 装饰器(Decorator):(又叫语法糖) 定义:本质是函数,功能(装饰其它函数)就是为其他函数添加附加功能 原则:(1).不能修改被装饰的函数的源代码 (2).不能修改被装饰的函数的调用方式 1.先来实现一个简单的装饰器示例: #!/usr/bin/env python # -*- coding:utf-8 -*- #

Python学习笔记__4.4章 装饰器(添加额外功能)

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 装饰器可以帮助我们为已经存在的对象添加额外的功能 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 装饰器经常用于有切面需求的场景,比如:插入日志.性能测试.事物处理.缓存.权限校验等场景. 1.1.为now函数 加一行日志 # 定义now函数 def now(): print('2018-5-8') # 编辑decorator def log(func):

应该怎么做一个登录功能?

版权是我的,转载没有通过我的同意的爬虫都是傻逼. 假设有user表.里面有id,acount(账户,nvarchar(50)),pwd(密码,nvarchar(50)). 最简单的实现 渣渣说做个登录功能,那还不简单. select * from user where  acount=XX AND PWD =YY; 然而,某天,我们需要在登录的时候更新最后登录时间,也就是在user表里面加个lastLoginTime. 这时渣渣说 select id from user wher acount=

说说设计模式~装饰器模式(Decorator)~多功能消息组件的实现

返回目录 为何要设计多功能消息组件 之前写过一篇装饰器模式的文章,感觉不够深入,这次的例子是实现项目中遇到的,所以把它拿出来,再写写,之前也写过消息组件的文章,主要采用了策略模式实现的,即每个项目可以通过配置进行一种消息的订制,如,你可以订制email,sms,rtx,qq等,但不能同时采用多种机制完成消息的发送,这在一些情况下是没有问题的,但有时,我们也需要同时为客户提供多种消息的推送,这在目前还是挺现时的,如在用户下单后,同时为它发email 和短信进行通过,并对每个订单的过程进行跟踪并通知

图文详解-如何用Axure做一个倒计时功能按钮

本篇主要给大家讲一下如何用Axure巧妙简单的实现一个倒计时功能. demo地址: http://pan.baidu.com/s/1jI4IRzC 密码: 8ghd 需要更详细学习的同学可以看下面文章.偷懒的同学可以直接在demo里复制出想要的部分即可使用了. 1.把主要元素进行排版设计: 这里每个人有每个人的习惯,没有一个标准,只是将主要元素进行组织后加以排版.大家发现并没有获取验证码按钮,这是我们的关键.下一步开始进行添加 2.添加一个Dynamic Panel(动态面板)命名为getCod

装饰器做权限认证

#!/usr/bin/env python #_*_coding:utf-8_*_ from django.shortcuts import render,HttpResponse allow_list = ['admin'] def cron_allow(request,**kwargs): if request.user.username in allow_list: return True else: return False def check_cron_permission(fun):

iOS网络篇3-利用UIWebView做一个浏览器功能

在UIkit中,苹果封装了一个特别好用的控件UIWebView能够实现简单的网页加载和文件加载 一.加载网页资源 1.首先新建一个singleView项目,在storyboard拖如下控件 2.设置相关属性连接如下 3.在ViewController.m里的类扩展遵守UISearchBarDelegate和UIWebViewDelegate @interface ViewController () <UISearchBarDelegate,UIWebViewDelegate> /**网页展示*