问题描述

我们经常在登录一些网站的时候,发现我们如果连续的输错好几次密码,我们的帐号就被锁定起来了,那这个过程是如何实现的呢?本程序主要就是解决以下3件事情
1.输入用户名密码
2.认证成功并显示欢迎信息
3.输错三次后锁定

解决办法

# !/usr/bin/env python
# -*- coding: utf-8 -*-
# Time: 17-11-18 上午8:45
# Author: sty
# File: login_judge.py# 1.输入用户名密码
# 2.认证成功并显示欢迎信息
# 3.输错三次后锁定
import json# 初始化json文件
def utilize():data = [{'usr': 'sty', 'pwd': '123', 'lock': 0, 'cnt': 0},{'usr': 'bat', 'pwd': 'alibaba', 'lock': 0, 'cnt': 0}]with open('data.json', 'w') as f:json.dump(data, f)# login判断登录
def login():with open('data.json', 'r') as f:res = json.load(f)while True:new = []user_name = input('user_name:')user_pwd = input('user_pwd:')flag = 0# flag: 0表示该用户不存在 1表示用户存在密码正确 2表示用户名存在,但是被锁定或密码错误for user in res:if user['usr'] == user_name:flag = 2if user['pwd'] == user_pwd:if user['lock'] == 1:print('you have been locked')else:flag = 1user['cnt'] = 0print("welcome to file")else:if user['lock'] == 1:print('you have been locked')else:user['cnt'] = user['cnt'] + 1# 如果user输入密码三次 锁定用户if user['cnt'] == 3:user['lock'] = 1new.append(user)# 文件中更新帐户数据with open('data.json', 'w') as f:json.dump(new, f)if flag == 1:breakif flag == 0:print("this user is not exist")if __name__ == "__main__":# 第一次使用初始化json文件# utilize()login()

增加一些改进

貌似很多网站还设置了一个时间记录,如果最近的一次登录时间和此次登录时间的间隔大于24小时了,你将继续获得三次登录机会,这个我们仅需要在上述的代码中添加一个处理时间的判断和相应的在json文件中添加time字段用来存储时间。需要注意的是在文件中使用到了一个格林威治时间与本地时间的装换。

# !/usr/bin/env python
# -*- coding: utf-8 -*-
# Time: 17-11-18 上午8:45
# Author: sty
# File: login_judge.py# 1.输入用户名密码
# 2.认证成功并显示欢迎信息
# 3.输错三次后锁定
import json
import time
from datetime import datetime# 初始化json文件
def utilize():data = [{'usr': 'sty', 'pwd': '123', 'lock': 0, 'cnt': 0, 'time': '2017-01-01 0:0:0'},{'usr': 'bat', 'pwd': 'alibaba', 'lock': 0, 'cnt': 0, 'time': '2017-01-01 0:0:0'}]with open('data.json', 'w') as f:json.dump(data, f)#判断间隔时间
def time_judge(start_time, end_time):day = (end_time - start_time).daysreturn day# UTC时间转本地时间(+8:00)
def utc2local(utc_st):now_stamp = time.time()local_time = datetime.fromtimestamp(now_stamp)utc_time = datetime.utcfromtimestamp(now_stamp)offset = local_time - utc_timelocal_st = utc_st + offsetreturn local_st# 本地时间转UTC时间(-8:00)
def local2utc(local_st):time_struct = time.mktime(local_st.timetuple())utc_st = datetime.utcfromtimestamp(time_struct)return utc_st# login判断登录
def login():with open('data.json', 'r') as f:res = json.load(f)while True:new = []user_name = input('user_name:')user_pwd = input('user_pwd:')flag = 0# flag: 0表示该用户不存在 1表示用户存在密码正确 2表示用户名存在,但是被锁定或密码错误for user in res:if user['usr'] == user_name:flag = 2last_time = datetime.strptime(user['time'],"%Y-%m-%d %H:%M:%S")now_time = utc2local(datetime.utcnow())# 判断时间间隔if time_judge(last_time, now_time) > 1:user['lock'] = 0user['cnt'] = 0if user['pwd'] == user_pwd:if user['lock'] == 1:print('you have been locked')else:flag = 1user['cnt'] = 0print("welcome to file")else:if user['lock'] == 1:print('you have been locked')else:user['cnt'] = user['cnt'] + 1# 如果user输入密码三次 锁定用户if user['cnt'] == 3:user['lock'] = 1user['time'] = now_time.strftime("%Y-%m-%d %H:%M:%S") #更新登录时间new.append(user)# 文件中更新帐户数据#print(new)with open('data.json', 'w') as f:json.dump(new, f)if flag == 1:breakif flag == 0:print("this user is not exist")if __name__ == "__main__":# 第一次使用初始化json文件#utilize()login()

转载请注明出处:
CSDN:楼上小宇_home:http://blog.csdn.net/sty945

python实现简单的用户密码登录控制(输入三次就锁定用户)相关推荐

  1. Python3.5 Day1作业:实现用户密码登录,输错三次锁定。

    作业需求: 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 实现思路: 1.判断用户是否在黑名单,如果在黑名单提示账号锁定. 2.判断用户是否存在,如果不存在提示账号不存在. 3. ...

  2. python telnet线程锁_对python使用telnet实现弱密码登录的方法详解

    系统环境: 64位win7企业版 python2.7.10 2016.08.16修改内容: 1)read_until()函数是可以设置timeout的,之前不能获取到password之后的返回是因为调 ...

  3. linux用户密码管理,Linux_详解Linux中的用户密码管理命令passwd和change,passwd 修改用户密码参数 nbsp - phpStudy...

    详解Linux中的用户密码管理命令passwd和change passwd 修改用户密码 参数 -k 保持未过期身份验证令牌 -l 关闭账号密码.效果相当于usermod -L,只有root才有权使用 ...

  4. 普通用户不能登录linux图形界面,只有root用户可以登录到图形界面

    普通用户不能登录linux图形界面,只有root用户可以登录到图形界面(普通用户,用户名和密码输入正确,点击登录,2秒后又返回到了登录界面,即不能登录.)这个问题的解决办法如下: /tmp这个目录的权 ...

  5. 用户密码登录改造实现

    业务层 创建com.oauth.service.AuthService接口,并添加授权认证方法: package com.leon.oauth.service;import com.leon.oaut ...

  6. ubuntu服务器ssh登录密码修改,Ubuntu-18.04 下修改root用户密码,安装SSH服务,允许root用户远程登录,安装vsftp服务器...

    修改root用户密码 打开终端,输入 sudo passwd root 指令: 安装SSH服务 ssh默认端口号是22,可以在/etc/ssh/sshd_config文件中修改 查看服务器否开启:ne ...

  7. python最简单的账号密码验证_Python之简单的用户名密码验证

    #Author jack # _*_ coding: utf-8 _*_ #date 2019-08-14 ''' 作业一:编写登录接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 ''' ...

  8. linux7怎么禁止用户密码登录,Centos7锁定用户禁止登陆的解决办法

    针对Linux上的用户,如果用户连续3次登录失败,就锁定该用户,几分钟后该用户再自动解锁.linux有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值,则锁 ...

  9. java后台实现用户密码登录和手机短信登录

    1.账号密码登录:获取用户名.密码,检验是否存在该账号,以及该账号是否有效(未冻结.未删除),检验密码是否正确 public Result<JSONObject> login(@Reque ...

最新文章

  1. Adobe将于2020年末停止对Flash的支持
  2. Java oracle查询语句无法赋值给_java.sql.SQLException: 无法转换为内部表示 -〉java 查询oracle数据库返回错误信息...
  3. 【Python】Python爬虫快速入门,BeautifulSoup基本使用及实践
  4. 没有学过功夫能否练神功
  5. CodeForces - 1295D Same GCDs(欧拉函数)
  6. 0820-拼多多二面
  7. 使用 cf push 部署应用到 SAP BTP 时遇到错误消息 No domains exist for route
  8. P5662-纪念品【dp】
  9. Hystrix---SpringCloud
  10. CentOS7安装详解
  11. 亚信java在线测评题库_校招秋招,网申在线测评如何训练才能通过?
  12. centos7默认字体_CentOS7终端的分辨率和字体修改
  13. 空冷器投用步骤_石油二厂制氢装置为空冷器“洗澡”【奋进之路】
  14. C# 在 webBrowser 光标处插入 html代码 .
  15. 赋能金融全链路,360金融的融合中台究竟有何不同?
  16. 图像、视频等文件类型(拓展名)
  17. mysql 命令行关闭fuw_网络管理 - eSight V300R009C00 维护指南 12 - 华为
  18. 非常好用的卸载软件工具【纯净绿色卸载】
  19. JAVA Servlet进阶
  20. Spring之Introductions(简介)应用

热门文章

  1. 2022-2028年中国高纯锑行业市场全景研究及发展趋势分析报告
  2. Oracle type (自定义类型的使用)
  3. 2022-2028年中国手机支付市场投资分析及前景预测报告
  4. 笔记本电脑的有线和无线网络同时使用,如何设置?
  5. List再整理,从代码底层全面解析List(看完后保证收获满满)
  6. vue响应式给数组中的对象添加新属性
  7. 激光雷达激烈竞争市场
  8. 适用于Windows和Linux的Yolo-v3和Yolo-v2(上)
  9. [C] 层层递进——C语言实现广度优先搜索
  10. Android 通过创建一个类来传递对象