Python模拟登录成功与失败处理方式(不涉及前端)
任务说明:
(1) 用户输入用户名,如不存在此用户不能登录;
(2) 用户在输入密码时,如果连续输入三次错误,则该用户被锁定一段时间;
(3) 用户被锁定一段时间后,可再次进行尝试登录;
程序使用库:
datetime https://docs.python.org/2/library/datetime.html
pymysql http://pymysql.readthedocs.io/en/latest/index.html
数据库设计如下:

数据库数据形式如下

程序说明:
程序结构为顺序结构,未涉及到函数的调用之类,只是为了练习使用pymysql 进行增删该查的功能
整体思路如下
(1) 链接数据库
#创建数据库的链接
connection = pymysql.connect(host='127.0.0.1',
port=3306,
user='root',
password='',
db='myschool',
charset='utf8',
cursorclass=pymysql.cursors.DictCursor)
(2) 交互输入登陆用名名,并根据输入查询数据库数据
userName = input("输入用户名:")
if "q"!=userName and "Q"!=userName:
with connection.cursor() as cursor:
#根据用户名查出用户信息
sql = 'select * from t_user where name = %s'
result = cursor.execute(sql,userName);
(3) 判断输入的用户名是否存在,如不存在则返回重新输入,如存在则判断是否被锁定,如果被锁定还得判断是否已经过了锁定时间
# 判断是否存在此用户
if 0==result:
print("无此用户名存在!")
continue
#获取用户信息
item = cursor.fetchone()
is_login = False
# 判断用户是否被禁
if item["is_based"]:
last_login_time = item["login_time"]
login_time = datetime.datetime.now()
waiting_time = int(((login_time-last_login_time).total_seconds())/60)
#用户如果被禁,判断还需要多长时间等待
if (waiting_time-3)<0:
print("账号暂时锁定,请等待%d分钟"%(3-waiting_time))
break
(4) 连续输入三次,如果密码输入错则被登录失败,否则登陆成功
times = 0
# 3次输入密码的机会
while times<3:
password = input("请输入密码:")
if password != item["password"]:
times += 1
else:
is_login = True
break # 登录成功与否,禁用信息以及登录信息数据都在数据库进行更新
if is_login:
is_based = 0
# 将datetime转换字符串类型
login_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("欢迎%s,登陆成功!"%(userName))
else:
is_based = 1
login_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("登录失败,请等待10min")
(4) 更新数据库的信息
# 更新数据库的Mysql语句
sql = "update t_user set is_based = %d , login_time = '%s' where name='%s'"%(is_based,login_time,userName)
cursor.execute(sql) # 由于对数据库进行了更新,故需要提交事务
connection.commit()
全部代码如下:
import pymysql
import datetime
#创建数据库的链接
connection = pymysql.connect(host='127.0.0.1',
port=3306,
user='root',
password='',
db='myschool',
charset='utf8',
cursorclass=pymysql.cursors.DictCursor)
try:
while True:
userName = input("输入用户名:")
if "q"!=userName and "Q"!=userName:
with connection.cursor() as cursor:
#根据用户名查出用户信息
sql = 'select * from t_user where name = %s'
result = cursor.execute(sql,userName);
# 判断是否存在此用户
if 0==result:
print("无此用户名存在!")
continue
#获取用户信息
item = cursor.fetchone()
is_login = False
# 判断用户是否被禁
if item["is_based"]:
last_login_time = item["login_time"]
login_time = datetime.datetime.now()
waiting_time = int(((login_time-last_login_time).total_seconds())/60)
#用户如果被禁,判断还需要多长时间等待
if (waiting_time-3)<0:
print("账号暂时锁定,请等待%d分钟"%(3-waiting_time))
break times = 0
# 3次输入密码的机会
while times<3:
password = input("请输入密码:")
if password != item["password"]:
times += 1
else:
is_login = True
break # 登录成功与否,禁用信息以及登录信息数据都在数据库进行更新
if is_login:
is_based = 0
# 将datetime转换字符串类型
login_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("欢迎%s,登陆成功!"%(userName))
else:
is_based = 1
login_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("登录失败,请等待10min") # 更新数据库的Mysql语句
sql = "update t_user set is_based = %d , login_time = '%s' where name='%s'"%(is_based,login_time,userName)
cursor.execute(sql) # 由于对数据库进行了更新,故需要提交事务
connection.commit()
break
else:
print("退出!!!")
break
finally:
# 最终关闭链接
connection.close();
Python模拟登录成功与失败处理方式(不涉及前端)的更多相关文章
- 【Python数据分析】Python模拟登录(一) requests.Session应用
最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...
- Python模拟登录实战(一)
今天,学习了模拟登录新浪微博.模拟登录主要有两种方式,一.利用Cookie:二.模仿浏览器的请求,发送表单. 法一: Cookie:指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密 ...
- [Python] Python 模拟登录,并请求
Python 模拟登录,并请求 # encoding: utf- import requests import socket import time socket.setdefaulttimeout( ...
- 【py登陆】python模拟登录
用Python模拟登录网站 前面简单提到了 Python 模拟登录的程序,但是没写清楚,这里再补上一个带注释的 Python 模拟登录的示例程序.简单说一下流程:先用cookielib获取cookie ...
- 忘记秘密利用python模拟登录暴力破解秘密
忘记秘密利用python模拟登录暴力破解秘密: #encoding=utf-8 import itertools import string import requests def gen_pwd_f ...
- 2019年最新 Python 模拟登录知乎 支持验证码
知乎的登录页面已经改版多次,加强了身份验证,网络上大部分模拟登录均已失效,所以我重写了一份完整的,并实现了提交验证码 (包括中文验证码),本文我对分析过程和代码进行步骤分解,完整的代码请见末尾 Git ...
- 使用python模拟登录网易邮箱网站
环境要求 python 3.6 chromedriver.exe 文件 人工登录 人工登录某个网站,首先需要用浏览器打开登录页面,然后在输入框中输入对应的账号和密码,最后点击登录,以下使用代码模拟以上 ...
- Python模拟登录实战(三)
目标:模拟登录知乎 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'ziv·chan' import re impor ...
- 用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)
老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用 ...
随机推荐
- 123 A. Prime Permutation
链接 http://codeforces.com/contest/123/problem/A 题目 You are given a string s, consisting of small Lati ...
- 6 个 Linux 运维典型问题
作为一名合格的 Linux 运维工程师,一定要有一套清晰.明确的解决故障思路,当问题出现时,才能迅速定位.解决问题,这里给出一个处理问题的一般思路: 重视报错提示信息:每个错误的出现,都是给出错误提示 ...
- windows Apache服务器配置
Apache 64位可以而32位不可以 安装Apache服务 注意: 如果没有自己设置Apache服务名,后面都可不跟-n "服务名",即采用默认的服务名称. 必须用管理员提示符打 ...
- python使用上下文管理器实现sqlite3事务机制
如题,本文记录如何使用python上下文管理器的方式管理sqlite3的句柄创建和释放以及事务机制. 1.python上下文管理(with) python上下文管理(context),解决的是这样一类 ...
- weighted_cross_entropy_with_logits
weighted_cross_entropy_with_logits 原创文章,请勿转载!!! weighted_cross_entropy_with_logits(targets, logits, ...
- git修改最后一次commit的内容
提交修改 $ git add test.txt $ git commit -m "提交test.txt文件" 修改注释说明 如果需要修改commit的注释说明,则执行以下命令: $ ...
- Spring常用注解简析
1. Autowired 自动装配,其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property.当然,getter看个人需求,如果私有属性需要对外提供的话,应当 ...
- python各种运算优先级一览表
##python各种运算的优先级 运算符 描述 lambda Lambda表达式 or 布尔"或" and 布尔"与" not x 布尔"非" ...
- 《深入理解Java虚拟机》学习笔记(二)
垃圾回收的前提是判断对象是否存活,对象不再存活时将会被回收,下面是2种判断的方法. 引用计数法: 主流的Java虚拟机并没有使用引用计数法来管理内存,重要的原因就是循环引用的问题难以解决. 可达性分析 ...
- 游戏2048源代码 - C语言控制台界面版
一.游戏介绍 <2048>是最近比较流行的一款数字游戏.原版2048首先在github上发布,原作者是Gabriele Cirulli.它是基于<1024>和<小3传奇& ...