初学者python笔记(装饰器后篇:登陆验证)

Python装饰器的高级用法(多个装饰器,带参数装饰器,类装饰器) 6 多个装饰器的使用 def make_div(func): """对被装饰的函数的返回值 div标签""" def inner(*args, **kwargs): return "<div>" + func() + "</div>" return inner def make_p(func): """对被装饰的函数的返回值... 阅读详情

装饰器有非常强大的功能,可以不修改函数源代码和调用方式,就给函数加上了对应想要的功能,简直就是 修饰函数的利器。 上一篇文章:初学者python笔记(装饰器、高阶函数、闭包)已经非常详细的剖析了装饰器的原理,本篇就来实现就来具体实现一个登陆验证的案例(源码可以直接使用)

修饰带参数的函数:

被修饰的函数参数个数是不固定的,而要修改参数个数就肯定需要修改装饰器和原函数,违反了装饰器的修改原函数源代码的原则。
而基本装饰器本来是不带有参数的,如果调用原函数需要传入参数怎么办?可以如下操作:

#装饰器
import time
def timmer(func):
    def wrap(*args,**kwargs):
        #一个接收列表,一个接收字典,用容器作为参数就可以不限参数个数了
        #相当于:foo('夏洛特玲玲','50','female','拿破仑','卡塔库栗'),
        #args=['夏洛特玲玲','50','female','拿破仑','卡塔库栗'],kwargs={ }
        start_time = time.time()  #给装饰器加的功能
        res = func(*args,**kwargs)  #在装饰器中运行函数,并且用一个变量来接收以返回原函数的返回值
        stop_time = time.time()
        print('函数运行了{}秒'.format(stop_time - start_time))
        return res  #返回原函数的返回值
    return wrap  #函数的返回值是函数,所以为高阶函数

#原函数
@timmer  #语法糖的使用,使原函数即foo函数被装饰。相当于foo = timmer(foo)语句
def foo(name,age,sex,weapen,son):
    time.sleep(3)
    print('test函数运行完毕!\n名字:%s,年龄:%s, 性别:%s,武器:%s,儿子:%s' %(name,age,sex,weapen,son))
    return '这是test的返回值'  #为了实现把原函数的返回值也接收到

#调用被修饰后的原函数
foo('夏洛特玲玲','50','female','拿破仑','卡塔库栗')  #运行原函数,方式不变,满足原则
#可以看到,加了*args和*kargs后就无论多少个参数都能正常运行了

运行结果:
test函数运行完毕!
名字:夏洛特玲玲,年龄:50, 性别:female,武器:拿破仑,儿子:卡塔库栗
函数运行了3.0121726989746094秒

登陆验证的实现


user_list = [   #查询密码的列表,包含所有的账号密码
    {'name':'路飞','passwd':'1111'},  #重点知识:因为你输入的是字符串,
    {'name':'索隆','passwd':'2222'},    #所以你字典的value也必须是字符串格式,不能是数字格式的值
    {'name':'罗','passwd':'3333'},
    {'name':'基德','passwd':'4444'}
]
current_dic = {'username':None ,'login':False}  #记录当前用户登陆状态的字典

#带验证功能的装饰器
def auth_func(func):
    def wrapper(*args, **kwargs):
        if current_dic['username'] and current_dic['login']:
            #如果都为True就执行,即输入过账号密码后就不需要再次输入了
            res = func(*args, **kwargs)  #直接执行,不需要再输入账号密码
            return res
        #否则就输入账号密码
        username = input('用户名:').strip()  #让用户输入登陆信息
        passwd = input('密码:').strip()
        #遍历字典来匹配账号密码是否正确
        for user_dic in user_list:  #user_dic是用来遍历列表中每个字典的变量
            #print(user_dic['name'],user_dic['passwd'])
            if user_dic['name'] == username and user_dic['passwd'] == passwd: #验证账号密码 
                #print(user_dic['name'],user_dic['passwd'])
                #输入正确就记录下登陆状态,用记录状态的字典
                current_dic['username'] = username
                current_dic['login'] = True
                #print(current_dic['login'])
                res = func(*args, **kwargs)  #接收原函数返回值
                return res
                        
        #else跟for成对,表明如果你输入的连用户名都不存在,那就不用遍历了
        else:
            print('用户名或密码错误!!!')
    return wrapper  #如果密码错误就不会有返回值,而是返回wrapper重新再输入

@auth_func
def index():
    print('欢迎来到淘宝主页!')

@auth_func
def home(name):
    print('欢迎%s回家' %name)

@auth_func
def shopping_car(name):
    print('%s的购物车里有:%s、%s、%s' %(name,'连衣裙','海贼手办','迪迦凹凸曼'))

print('初始用户状态:',current_dic)
index()
print('输入后用户状态:',current_dic)
home('您')  #该函数无论传入什么值都可以,只是给函数内部多一个全局变量
shopping_car('您')

运行结果:
初始用户状态: {‘username’: None, ‘login’: False}
用户名:索隆
密码:2222
欢迎来到淘宝主页!
输入后用户状态: {‘username’: ‘索隆’, ‘login’: True}
欢迎您回家
您的购物车里有:连衣裙、海贼手办、迪迦凹凸曼

以上就是装饰器案例的实现,如果你看了上一篇装饰器原理的文章,本篇案例肯定是可以理解的

Python学习笔记:使用装饰器实现账户密码的登陆验证与新用户密码新增 直接上代码 #1先自定义一个用户名与密码组成的列表 ```li1=[{'name':'admin','password':'000000'}] #2设定一个验证变量 Flag = True #3定义一个验证登陆信息的装饰器 def check(func): def check_in(): while True: print(' '*11,'请登... 阅读详情

相关推荐

Python自动化批量识别化学分子结构——从图片到SMILES/SDF的实战指南

本文提供了使用Python自动化批量识别化学分子结构图片的实战指南。详细对比了基于Molvec API的在线快速方案与本地部署OSRA工具的两种路径,包含完整的代码示例、环境配置及优化技巧,帮助化学研究者高效地将图片批量转换为SMILES或SDF格式,显著提升数据处理效率。

apple5的专栏 946

Python作业实验习题

1、给每个函数写一个记录日志的功能,要求,每次一调用函数之前,都要将函数名称,时间节点记输出。2编写装饰器,在每次执行目标函数之前先让用户输入用户名和密码,给用户三次机会,登录成功才能访问目标函数。3编写装饰器,为多个函数加上登录认证功能,(用户有3次登录机会), 要求,如果登录成功了,后续就不用再登录了。

qq_64618483的博客 230

Windows 10下用Python 3搞定Android源码下载:最新repo工具避坑指南

本文详细介绍了在Windows 10系统上,使用Python 3和官方最新repo工具下载Android源码的完整流程。文章提供了从Git安装、环境配置到repo工具初始化、同步加速及常见错误排查的避坑指南,帮助开发者高效搭建稳定的源码下载环境。

weixin_29266749的博客 436

Python 装饰器的应用---登录认证

""" 需求:登录优快云社区成功后,才可以访问"博客"、"课程"、"问答"等页面 已有账户文件 csdn 及账户密码: albert|123456 don|456 jack|789 """ # 记录用户登录状态的字典 user_status = {'usname': None, 'status': False} def get_userpwd(): user_dict = {} with open('csdn', encoding='utf-8', mo

m0_57787326的博客 902

一起学习Avalonia(十三)

Avalonia 前面已经简单介绍了一下相关开发,有一个系统的了解。 到今天Avalonia已经基本成熟,但是扩展支持的还是不可能达到大企业的,我估计这也不可能。考虑了下,微软的MAUI框架可能会普及性更高,Avalonia也是我无意间知道的。 微软毕竟是会宣讲的全球。并且微软全球研发投入很大,全部专职开发,这种速度当然大。但是MAUI根据计划,可能还要很长时间,而且是社区支持Linux,估计时间更久。这不能适应现在的国产化开发。 预计一段时间还是需要Avalonia作为优先。当前Avalonia使

jinyuttt的专栏 4086

Open3D (C++) 使用点云创建数字高程模型DEM

Open3D (C++) 使用点云创建数字高程模型DEM

点云侠的博客 1392

python使用装饰器验证登录状态

1、访问页面时模拟网站登录验证 2、提供2个登录通道 3、指定具体页面使用特定的登录通道,登录登录后保留登录状态,切换到其他页面时检测登录状态 4、不同通道登录账号密码用文件保存,读取之后进行验证登录(后期更换为数据库读取)   login_status_jingdong=False login_status_weixin=False def login(login_channel):...

qq_42283785的博客 1937

仿真学习系列(三十):Sigrity设计文件(Altium Designer和Allegro)导入

很多刚接触 Sigrity 的工程师都会产生疑问:Sigrity 功能这么多,是不是门槛很高?我能学得会吗? 其实,Sigrity 的核心并不在“操作难”,而是在“理解仿真背后的机理”。一旦掌握基本流程,你会发现它并没有想象中那么复杂,反而能大大提升你的高速设计能力。本节内容,就是从最简单的一步开始 —— 把你的设计文件正确导入 Sigrity。

案例文章,高速信号 524

python-使用装饰器实现简单的登陆验证

#!/usr/bin/env python # -*- coding:utf-8 -*- user_dic={'username':None,'login':False} def auth_func(func): def wrapper(* args): if user_dic['username'] and user_dic['login']: ...

qq_40406704的博客 1830

国产系统(统信 UOS )漏洞修复方式

2.1 服务器版(单漏洞更新):服务器标准版:yum upgrade-minimal --cve “CVE编号”服务器 D 版:sudo apt update&&sudo apt install “受影响的软件包”1 统信 UOS 漏洞修复方式在线升级修复桌面专业版:通过以下步骤打开在线升级:控制中心–>更新–>更新设置–>打开系统更新、安全更新。安装过程中,请勾选“我已阅读并知晓”,然后点击“开始升级”。2 点击“检查更新”–“全部下载”,如果不想进行系统更新,可以选择只下载“安全更新”。

Reyn_观极 5016

桌面运维工程师面试题汇总(高频完整版)

岗位,覆盖:电脑硬件、系统安装与故障、网络、办公软件、安全、AD域、打印机、日常排错、服务意识。

老韩的Linux云计算架构师进阶之路 921

Python—装饰器模拟用户登陆验证功能

user_list = [ {'name':'sb1','passwd':'123'}, {'name':'sb2','passwd':'123'}, {'name':'sb3','passwd':'123'}, {'name':'sb4','passwd':'123'} ] #初始状态,用来保存登陆的用户, client_dic = {'username':No...

qq_33531400的博客 2903

ACS运动控制器编程语言

ACS运动控制器采用SPiiPlusLanguage(SPL)作为核心编程语言,该语言基于C语法设计,内置丰富的运动控制指令,支持点位运动、插补等复杂控制。控制器提供专用开发工具SPiiPlusManager和ACSStudio,支持图形化编程与调试。同时兼容TCP/IP、EtherCAT等多种扩展接口,便于与上位机或PLC集成。使用时需注意实时性优先级、轴参数匹配等关键事项。官方文档和示例程序为开发者提供了完善的学习资源。

StevenChen的博客 619

Python面经----Python装饰器模拟用户登陆验证功能

此代码借鉴自Python—装饰器模拟用户登陆验证功能 自己写一遍加深记忆,方便查找 Python装饰器模拟用户登陆验证功能 user_list = [ {'name': 'sb1', 'password': '123'}, {'name': 'sb2', 'password': '123'}, {'name': 'sb3', 'password': '123'}, {'name': 'sb4', 'password': '123'} ] client_user = {'na

w770476377的博客 547

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python装饰器在web中登陆验证的应用

一、装饰器的定义    装饰器,是指在不改变原有代码的情况下,给原有的方法添加新功能。    装饰器一般由两个方法组成,外方法返回内方法,外方法将方法块引用作为参数,内方法将方法块参数作为参数。    例子(基于django):    已有一个首页页面的view方法,它返回一个页面def index(request): return render(request, 'index.html'...

koral的博客 358

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Django通过session验证登陆(装饰器)

Django通过session,验证是否登陆的装饰器。 # 创建或修改 session: request.session[key] = value # 获取 session: request.session.get(key,default=None) # 删除 session del request.session[key] # 不存在时报错 def examineSession(...

菜鸟猿小天 2179

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Flask(2):登陆验证

装饰器补充: import functools def auth(func): @functools.wraps(func) # 作用:把原函数的原信息封装到 inner 中 def inner(*args,**kwargs): ret = func(*args,**kwargs) return ret r...

dfkk36262的博客 276

Python从入门到实践:函数之装饰器

把原来能运行的程序改成bug,这就破坏了程序的封闭原则,登录的功能我们一般是不做修改的。 开放式功能的对外拓展,比如登录系统的功能可以对外拓展很多功能。所以,有没有什么办法,没在不修改原来的代码情况下,添加功能?这就是装饰器!......

weixin_43507744的博客 3621

023_Python装饰器_案例_多装饰器_权限验证

利用装饰器实现用户的权限验证,逻辑关系: 如果用户出现购买行为,调用buy 函数,则对用户进行权限验证 对用户进行登陆权限验证 2.1 用户已登陆,跳转至 step3 2.2 用户未登录,进行用户登录 对用户进行用户权限验证 3.1 用户权限为 1,可进行购买操作 3.2 用户权限不是1,不可进行相应的购买操作 from functools import wraps # 系统中的用户信息;...

煮面要加牛奶的博客 739

python装饰器配置_使用python装饰器验证配置文件示例

使用python装饰器验证配置文件示例根据不同配置文件调用不同的验证函数检查输入。可以根据需求更改验证函数的逻辑。代码如下:def VerifyData(func):def VerifyInt(data):assert(int(data) > 0)def VerifyString(data):assert(len(data) > 10)def inner(*args, **kvargs...

weixin_39853590的博客 172

Python---装饰器

千峰#1.11.7 # 地址引用 a = 10 # 声明整型变量 b = a def test(): # 声明函数 print('------test------') t = test # test() # t() def func(f): # f=test print(f) # <function test at 0x0000019DE6A27550> f() # ------test------ print('------&g.

renwen1579的博客 161

python_装饰器之页面登陆验证

import timedef auth(func): def wrapper(*args, **kwargs): username = input('username:').strip() password = input('password:').strip() if username == 'admin' and password == '123...

weixin_30731287的博客 242

python装饰器实现登陆验证

一: 定义有参数的装饰器 其中 CheckFileByName 是进行验证的过程 二: 登陆方法 三: 实现装饰调用 转载于:https://www.cnblogs.com/LLWH134/p/9782262.html...

dnu50081的博客 488

python图书馆系统借书验证登陆_利用装饰器函数验证

图书馆系统借书验证登陆_利用装饰器函数验证 islogin_status = False # 判断登陆是否成功,登陆成功修改登陆状态 def islogin(username, password): global islogin_status if username == 'admin' and password == '123': islogin_status = True else: print("登陆失败") def decorate(f

Xu_Mingyong的博客 221

Python 装饰器并举例付款前登录验证

Python 装饰器 1、装饰器的特点: (1)只要是装饰器,函数作为参数出现的,即 def 函数B(函数A) (2)要有闭包的特点,如下,定义一个装饰器

qq_44994799的博客 292
上一篇: 初学者python笔记(装饰器、高阶函数、闭包)
下一篇: 初学者python笔记(模块篇)
鸿蒙Next
鸿蒙Next 优质创作者: python技术领域 优质创作者: python技术领域
博客等级 码龄7年 2万+粉丝 300原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿蒙Next

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值