python登录加随机验证码校验程序(装饰器内置函数的理解)

使用说明:为了防止恶意攻击,同时不对原先用户登录验证的方法代码进行改动,在检验账号密码方法外再套一层校验方法(验证码),过滤非人为的攻击。

代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import json
import random

###取得绝对路径下的账号密码文件
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
filepath= "%s\\username_passwd" % BASE_DIR          
print("进入用户登录页面")

###外套的校验码程序
def deco(func):
    def _deco():
        randomnum = str(random.randrange(1000, 10000))
        print("验证码:",randomnum)
        inputrandomnum=input("请输入验证码:")
        if inputrandomnum == randomnum:
            func()
            return func
        else:
            print("验证码输入错误")
            exit()
    return _deco

###
#@deco
def authentication():
    username = input("请输入用户名:")
    passwd = input("请输入密码:")
    f=open(filepath,‘r‘,encoding=‘utf-8‘)
    date = json.loads(f.read())
    try:
        if date[username] == passwd:
            print("用户名密码认证通过")
            return True
        else:
            print("密码错误,请重新输入")
    except KeyError:
        print("不存在的用户")

_authentication=deco(authentication)       ###这里指向deco(func)内存中的地址
pass_tag = _authentication()             ###这里等于deco(func)(),或者deco._deco()

其中装饰器deco函数内置函数_deco,是为了使deco被初次申明赋值时,不会立即执行里面的func(),而是等下次调用才执行里面的func()。

时间: 2024-10-06 02:31:34

python登录加随机验证码校验程序(装饰器内置函数的理解)的相关文章

装饰器 内置函数

1.装饰器 它在不改变原有的函数的代码和调用方式,给他添加新功能. 1.函数即变量 2.def func(func1): func1() 3.函数里面也可以嵌套函数 装饰器本身就是一个函数 高阶函数+函数嵌套 = 装饰器 2.内置函数 i = int('345')#转换int类型 fl = float('2.1')#转换float类型 dic =dict(k=1,v=2)#转换成字典 lis = list('1,2,3')#转换成list new_set = set(lis) def say()

python装饰器内获取函数有用信息方法

装饰器内获取函数有用信息方法 .__doc__用于得到函数注释信息 .__name_用于得到函数名 在函数引用装饰器的时候,函数名会变为装饰器内部执行该函数的名字,所有在直接执行函数名加.__doc__或__name_的时候得到的是,装饰器内部函数的注释信息和名字.因为函数名被替换了. 所以想得到实际的内容,需要引用一个模块,from functools import wraps,并在装饰器函数内部再加一个@wraps的形式改变,得到实际想得到的信息. 作用是在函数加上装饰器后让能够得到真正原来

Python学习之旅 —— 基础篇(四)内置函数、装饰器

本篇要点: 内置函数 装饰器 一.内置函数 # abs() :取绝对值 >>> res = abs(-10) >>> print(res) 10 # 0,None,"",{},[],() 布尔值都为空 # all(),any() 判断值的真假 # all() 所有为真才为真 p = all([0,1,2,3]) # 0为False,所有p 是False print(p) # any() 任意一个为真即为真 p = any((0,""

Python基础------生成器表达式形式、面向过程编程、内置函数部分

生成器表达式形式 直接上代码 1 # yield的表达式形式 2 def foo(): 3 print('starting') 4 while True: 5 x=yield #默认返回为空,实际上为x=yield None 6 print('value',x) 7 g=foo() 8 print(g.__next__()) #停到yield位置,生成器初始化,遇到yield返回一个None 9 print('---分割线君---') 10 print(g.send(1)) #传值给yield,

【Python】从简单案列中揭示常用内置函数以及数据类型

前面提到了BIF(内置函数)这个概念,什么是内置函数,就是python已经定义好的函数,不需要人为再自己定义,直接拿来就可以用的函数,那么都有哪些BIF呢? 可以在交互式界面(IDLE)输入这段代码,注意是两边都是双下划线 1 dir(__builtins__) 则可以查看不同python版本都有哪些BIF 就看这些就能很明显的看出python3和python2还是有很多区别的,想看哪个BIF的用法就直接help()它看官方文档就行,这里要说的是,python官方的代码其实很少的语法,基本都是很

Python学习笔记四(迭代器、生成器、内置函数)

一.迭代器 1.迭代器定义 迭代是一个重复的过程,每次重复一次迭代,并且每次迭代的结果都是下一次迭代的初始值. l = ["aaa","bbb","ccc"] count = 0 while count< len(l): #每次重复完成后count都是下一次的初始值 print(l[count]) count+=1 需要迭代器的原因:对于序列类型str.list.tuple可以依赖索引迭代取值,对于dict.set.文件需要提供不依赖索引取

Python基础学习笔记(七)常用元组内置函数

参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000 Python常用元组内置函数: 序号 方法及描述 1 cmp(tuple1, tuple2)比较两个元组元素. 2 len(tuple)计算元组元素个数. 3 max(tuple)

Python基础学习笔记(八)常用字典内置函数和方法

参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-dictionary.html 3. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000 常用操作字典的内置函数: 序号 函数及描述 1 cmp(dict1, dict2)比较两个字典元素. 2 len(dict)计算字典元素个数,即键的总数. 3 str(di

python基础--定义装饰器(内置装饰器)

装饰器的定义: 装饰器本质上就是一个python函数,它可以让其它函数在不需要做任何代码改动的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景中,比如-- >插入日志.性能测试.事务处理.缓存.权限校验等场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同的代码并且可以重复使用. 装饰器的作用: 就是为已经存在的函数或者对象添加额外的功能 装饰器的写法: (无参装饰器) def wrapper(func): def inn