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开启写法生成验证码加验证码登录反向解析+传参