Python使用装饰器模拟用户登陆验证功能示例


Posted in Python onAugust 24, 2018

本文实例讲述了Python使用装饰器模拟用户登陆验证功能。分享给大家供大家参考,具体如下:

# -*- coding:utf-8 -*-
#!python3
user_list = [
  {'name':'ad1','passwd':'123'},
  {'name':'ad2','passwd':'123'},
  {'name':'ad3','passwd':'123'},
  {'name':'ad4','passwd':'123'}
]
#初始状态,用来保存登陆的用户,
client_dic = {'username':None,'login':False}
#添加新功能
def auth_func(func):
  def wrapper(*args,**kwargs):
    #参数检查,判断是否有用户登录,如果有,不用验证,直接执行函数的功能
    if client_dic['username'] and client_dic['login']:
      res = func(*args,**kwargs)
      return res
    #输入用户名和密码
    username = input('用户名:').strip()
    passwd = input('passwd:').strip()
    #对比列表,检查用户名和密码是否正确
    for user_dic in user_list:
      if username == user_dic['name'] and passwd == user_dic['passwd']:
        client_dic['username'] = user_dic['name']
        client_dic['login'] = True
        res = func(*args,**kwargs)
        return res
    else:
      print('用户名或者密码错误!')
  return wrapper
@auth_func
def index():
  print("欢迎来到主页")
@auth_func
def home(name):
  print("欢迎回家:%s"%name)
@auth_func
def shoppping_car():
  print('购物车里有[%s,%s,%s]'%('奶茶','妹妹','娃娃'))
print(client_dic)
index()
print(client_dic)
home('root')

运行结果:

Python使用装饰器模拟用户登陆验证功能示例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
通过代码实例展示Python中列表生成式的用法
Mar 31 Python
python实现复制整个目录的方法
May 12 Python
详解Django框架中的视图级缓存
Jul 23 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 Python
对Python的Django框架中的项目进行单元测试的方法
Apr 11 Python
Python实现的在特定目录下导入模块功能分析
Feb 11 Python
python Tkinter版学生管理系统
Feb 20 Python
Django模型序列化返回自然主键值示例代码
Jun 12 Python
python数据预处理之数据标准化的几种处理方式
Jul 17 Python
python rsync服务器之间文件夹同步脚本
Aug 29 Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 Python
Python日志模块logging基本用法分析
Aug 23 #Python
Python多继承原理与用法示例
Aug 23 #Python
Python抽象和自定义类定义与用法示例
Aug 23 #Python
Python引用计数操作示例
Aug 23 #Python
python实现括号匹配的思路详解
Aug 23 #Python
使用Python实现一个栈判断括号是否平衡
Aug 23 #Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 #Python
You might like
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
PHP实现的网站目录扫描索引工具
2016/09/08 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
2016/09/14 PHP
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
解决IE7中使用jQuery动态操作name问题
2017/08/28 jQuery
js字符限制(字符截取) 一个中文汉字算两个字符
2017/09/12 Javascript
Python学习笔记之os模块使用总结
2014/11/03 Python
Python实现计算最小编辑距离
2016/03/17 Python
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
python根据url地址下载小文件的实例
2018/12/18 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
python数值基础知识浅析
2019/11/19 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
python如何输出反斜杠
2020/06/18 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
银行实习人员自我鉴定
2013/09/22 职场文书
大学生毕业的自我鉴定
2013/11/13 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
经典毕业生求职信
2014/07/12 职场文书
化学专业大学生职业生涯规划范文
2014/09/13 职场文书
校园广播稿精选
2014/10/01 职场文书
团员个人年度总结
2015/02/26 职场文书
2015年五一劳动节演讲稿
2015/03/18 职场文书
python实现网络五子棋
2021/04/11 Python
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
浅谈redis缓存在项目中的使用
2021/05/20 Redis
swagger如何返回map字段注释
2021/07/03 Java/Android