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 变量类型及命名规则介绍
Jun 08 Python
在Python中操作日期和时间之gmtime()方法的使用
May 22 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
python中logging包的使用总结
Feb 28 Python
python多线程并发实例及其优化
Jun 27 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
python conda操作方法
Sep 11 Python
python实现把二维列表变为一维列表的方法分析
Oct 08 Python
Python换行与不换行的输出实例
Feb 19 Python
python递归调用中的坑:打印有值, 返回却None
Mar 16 Python
Selenium常见异常解析及解决方案示范
Apr 10 Python
通俗讲解python 装饰器
Sep 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/05/09 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
addRule在firefox下的兼容写法
2006/11/30 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
深入理解JavaScript定时机制
2010/10/29 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
Javascript编程之继承实例汇总
2015/11/28 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
2017/03/27 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
2018/10/28 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
vue 通过 Prop 向子组件传递数据的实现方法
2020/10/30 Javascript
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
python 远程统计文件代码分享
2015/05/14 Python
Python使用matplotlib绘制动画的方法
2015/05/20 Python
tensorflow 输出权重到csv或txt的实例
2018/06/14 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
采购员的工作职责
2013/12/26 职场文书
大一新生期末自我评价
2014/09/12 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
汽车转让协议书范本
2014/12/07 职场文书
升职自荐信范文
2015/03/27 职场文书
社区义诊通知
2015/04/24 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
Vue vee-validate插件的简单使用
2021/06/22 Vue.js
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android