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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()。


以上是关于python登录加随机验证码校验程序(装饰器内置函数的理解)的主要内容,如果未能解决你的问题,请参考以下文章

Django(十六)基于模板的登录案例:登录装饰器csrf攻击方式及防护ajax的Post 的csrf开启写法生成验证码加验证码登录反向解析+传参

SpringBoot+Vue项目中实现登录验证码校验

Python(73)_装饰器函数练习_执行函数前登录验证

python学习--装饰器生成器内置函数json

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

python学习笔记:装饰器生成器内置函数json