Python模拟用户登录验证


Posted in Python onSeptember 11, 2017

本文实例为大家分享了Python模拟用户登录验证的具体代码,供大家参考,具体内容如下

1.功能简介

此程序模拟用户登录验证的过程,实现用户名输入、黑名单检测、用户有效性判别、密码输入及验证等。用户在3次以内输入正确密码登陆成功,连续输错3次密码登陆失败,且该用户名被记录在黑名单,黑名单中的用户被锁定不能再登陆。

2.实现方法

本程序采用python语言编写,将各项任务进行分解并用定义对应的函数来处理,从而使程序结构清晰,易于维护。主要编写了四个函数:

login() #登陆函数,为主函数,完成用户名检测和密码验证
inquire_blacklist(name) #查询用户名是否在黑名单中
inquire_userlist(name) #查询用户名是否在用户名单中,并返回密码或None
add_blacklist(name) #添加用户名到黑名单文件
函数调用框架:运行login()-->输入用户名-->调用inquire_blacklist(name)进行黑名单检测-->调用inquire_userlist(name)进行用户名有效性判别,有效则返回用户密码,再与输入密码对比验证-->连续输错3次密码则调用add_blacklist(name)添加用户到黑名单。

3.流程图

Python模拟用户登录验证

4.代码

# Author:Byron Li

import os
BASE_DIR = os.path.dirname(__file__)  #获取文件目录路径
userlist='userlist.txt'   #存取已注册用户名单文件,包括用户名和密码
blacklist='blacklist.txt'  #存取锁定用户的黑名单文件
userlist_path = os.path.join(BASE_DIR,userlist)  #注册用户名单文件路径
blacklist_path = os.path.join(BASE_DIR,blacklist) #黑名单文件路径

#---------------------------登陆函数(主函数)--------------------------
def login(): #登陆函数
  username = input("请输入用户名:")
  while(True):
    if inquire_blacklist(username):   #查询输入用户名是否在黑名单中
      print("不好意思,此用户名\"%s\"已被锁定,禁止登陆!"%username)
      return False
    else:
      user_password = inquire_userlist(username) #查询输入用户名是否存在注册用户名单中,若存在则返回该用户密码
      if user_password:
        for i in range(3):
          password = input("请输入密码:") if i==0 else input("密码输入错误,请重新输入密码:")
          if password==user_password:
            print('欢迎%s登陆!'%username)
            return True
        else:
          print("您已经连续输错密码3次,用户名将被锁定,禁止再登陆!")
          add_blacklist(username)       #添加用户名到黑名单文件
          return False
      else:
        username = input('无效的用户名,请重新输入:')
# ------------------------------------------------------------


#-----------------查询黑名单函数-------------------------------
def inquire_blacklist(name):  #查询用户名是否在黑名单中
  with open(blacklist_path, 'r') as f:
    for line in f:
      if name==line.strip():
        return True
  return False
# ------------------------------------------------------------- 

#-----------------------查询用户名函数--------------------------
def inquire_userlist(name):  #查询用户名是否在注册用户名单中
  with open(userlist_path, 'r') as f:
    for line in f:
      [username,password] = line.split()
      if name==username:
        return password
  return None
# ------------------------------------------------------------


#-----------------------------添加黑名单函数--------------------
def add_blacklist(name): #添加用户名到黑名单文件
  with open(blacklist_path, 'a') as f:
    f.write(str(name)+'\n')
  return True
# ------------------------------------------------------------------------------
if login(): #执行登陆函数
  print('登陆成功!'.center(47,'*'))
else:
  print('登陆失败!'.center(47,'*'))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python基于pygame实现图片代替鼠标移动效果
Nov 11 Python
python使用opencv进行人脸识别
Apr 07 Python
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
pandas 将索引值相加的方法
Nov 15 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
Oct 12 Python
python 画条形图(柱状图)实例
Apr 24 Python
python如何输出反斜杠
Jun 18 Python
简单了解Django项目应用创建过程
Jul 06 Python
python遍历路径破解表单的示例
Nov 21 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 Python
对PyTorch中inplace字段的全面理解
May 22 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 Python
Python模拟三级菜单效果
Sep 11 #Python
轻量级的Web框架Flask 中模块化应用的实现
Sep 11 #Python
Python 模拟购物车的实例讲解
Sep 11 #Python
python添加模块搜索路径方法
Sep 11 #Python
解决Django模板无法使用perms变量问题的方法
Sep 10 #Python
python实现批量修改文件名代码
Sep 10 #Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 #Python
You might like
php面向对象中的魔术方法中文说明
2014/03/04 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
2015/12/24 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
javascript全局变量封装模块实现代码
2012/11/28 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
2019/10/16 Javascript
原生jQuery实现只显示年份下拉框
2020/12/24 jQuery
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
用Python编写web API的教程
2015/04/30 Python
python通过索引遍历列表的方法
2015/05/04 Python
python爬虫实例详解
2018/06/19 Python
详解python中的index函数用法
2019/08/06 Python
python中的split()函数和os.path.split()函数使用详解
2019/12/21 Python
python实现简单飞行棋
2020/02/06 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
.NET常见笔试题集
2012/12/01 面试题
腾讯公司的一个sql题
2013/01/22 面试题
销售人员自我评价怎么写
2013/09/19 职场文书
《美丽的公鸡》教学反思
2014/02/25 职场文书
超市开学活动方案
2014/03/01 职场文书
数学教研活动总结
2014/07/02 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
Flask搭建一个API服务器的步骤
2021/05/28 Python