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 这个工具用来识别验证码,非常好用 ...
随机推荐
- 【转】linux shell 逻辑运算符、逻辑表达式详解
shell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果. 一.逻辑运算符 逻辑卷标 表示意思 1. 关于档案与目录的侦测逻辑卷标! -f 常用!侦测 ...
- 【Java框架型项目从入门到装逼】第十五节 - jdbc模糊查询实现(附带详细调试过程)
上一节,我们实现了用户列表查询,已经按条件精确查询: if(student.getUsername() != null && !"".equals(student. ...
- Linux中fdisk硬盘分区方法
fdsik 能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统,比如linux .fat32. linux .linux swap .fat16 以及其实类Unix类操作系统的文件系统等:当 ...
- Spring的事务管理(理论篇,下篇提供代码实现)
事务:逻辑上的一组操作,这组操作要么全部成功,要么全部失败(事务十大特性:原子性,一致性,隔离性,持久性) 原子性:事务是不可分割的工作单位,事务中的操作要么都发生了,要么都不发生.(也就是说不能单独 ...
- hive权威指南<一>
一.ETL介绍: 数据抽取:把不同的数据源数据抓取过来,存到某个地方 数据清洗:过滤那些不符合要求的数据或者修正数据之后再进行抽取 不完整的数据:比如数据里一些应该有的信息缺失,需要补全后再写入数据仓 ...
- P1045 麦森数
别问我为什么要写水题 #include <iostream> #include <cstdio> #include <cstring> #include <a ...
- BZOJ 3993: [SDOI2015]星际战争 [二分答案 二分图]
3993: [SDOI2015]星际战争 题意:略 R1D2T1考了裸二分答案+二分图最大匹配... #include <iostream> #include <cstdio> ...
- servlet上传与下载
上传页面 上传学生信息 学号 姓名 密码 性别 男 女 年龄 身高 学院 计算机学院 软件学院 照片 简历 <!DOCTYPE html> <html lang=&qu ...
- SynchronousQueue 的联想
SynchronousQueue介绍 SynchronousQueue是一种阻塞队列,该队列没有任务的容量.内部实现采用了一种性能更好的无锁算法. 代码实现里的Dual Queue,其中每一个put对 ...
- 2n皇后问题
此题为蓝桥杯基础练习题. 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后 ...