任务说明:

  (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模拟登录成功与失败处理方式(不涉及前端)的更多相关文章

  1. 【Python数据分析】Python模拟登录(一) requests.Session应用

    最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...

  2. Python模拟登录实战(一)

    今天,学习了模拟登录新浪微博.模拟登录主要有两种方式,一.利用Cookie:二.模仿浏览器的请求,发送表单. 法一: Cookie:指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密 ...

  3. [Python] Python 模拟登录,并请求

    Python 模拟登录,并请求 # encoding: utf- import requests import socket import time socket.setdefaulttimeout( ...

  4. 【py登陆】python模拟登录

    用Python模拟登录网站 前面简单提到了 Python 模拟登录的程序,但是没写清楚,这里再补上一个带注释的 Python 模拟登录的示例程序.简单说一下流程:先用cookielib获取cookie ...

  5. 忘记秘密利用python模拟登录暴力破解秘密

    忘记秘密利用python模拟登录暴力破解秘密: #encoding=utf-8 import itertools import string import requests def gen_pwd_f ...

  6. 2019年最新 Python 模拟登录知乎 支持验证码

    知乎的登录页面已经改版多次,加强了身份验证,网络上大部分模拟登录均已失效,所以我重写了一份完整的,并实现了提交验证码 (包括中文验证码),本文我对分析过程和代码进行步骤分解,完整的代码请见末尾 Git ...

  7. 使用python模拟登录网易邮箱网站

    环境要求 python 3.6 chromedriver.exe 文件 人工登录 人工登录某个网站,首先需要用浏览器打开登录页面,然后在输入框中输入对应的账号和密码,最后点击登录,以下使用代码模拟以上 ...

  8. Python模拟登录实战(三)

    目标:模拟登录知乎 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'ziv·chan' import re impor ...

  9. 用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)

    老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用 ...

随机推荐

  1. 几次面试后才弄懂的HashMap

    本人大四,以前也开发过几个项目,Map相关集合也总用.但是从来没有研究过底层的实现,只知道杂用.结果在最开始的几次面试中一脸懵逼.认识到不足后,浅显的学习了一下,总结成一下几点.(如果写错了还望指正) ...

  2. HTML学习——表单标签

    1.type: 当 type="radio" 时,控件为单选框 当 type="checkbox" 时,控件为复选框 2.value:提交数据到服务器的值(后台 ...

  3. Linux学习笔记一

    本文记录了Linux中常用的一些东西. 命令生效顺序 第一顺位执行绝对路径或者相对路径的命令 第二顺位执行别名 第三顺位执行Bash的内部命令 第四顺位执行按照$PATH环境变量设置定义的目录顺序的第 ...

  4. Snort初探

    Snort初探 概念: Snort是一款开源的网络入侵防御系统(IPS),可以实时分析和记录网络数据包,你可以通过执行协议分析.内容搜索和匹配,从而发现各种网络攻击和可疑的探测.例如,缓冲区溢出.端口 ...

  5. 查询集API -- Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...

  6. Cypher查询语言--Neo4j 入门 (一)

    目录 操作符 参数 标识符 注解 Start 通过id绑定点 通过id绑定关系 通过id绑定多个节点 所有节点 通过索引查询获取节点 通过索引查询获取关系 多个开始点  Cypher是一个描述性的图形 ...

  7. 济南清北学堂游记 Day 0.

    (摄于千佛山山顶,济南城区风光) 看似稳得一比,实则慌如老狗= = 我可能是报到最早的且实力最弱的一只. 早晨六点二十被从床上拉起来,然后在火车站附近匆忙吃了点东西就坐火车去济南了. 路途不算远,大概 ...

  8. Linux系统下LNMP一键搭建Linux、PHP、MySQL环境(适合新手搭建linux下的web生成环境)

    一. 首先要解释一下,什么是LNMP,LNMP起源于LAMP,LAMP是Linux+Apache+Mysql/MariaDB+Perl/PHP/Python的缩写,这里将Web服务端的Apache替换 ...

  9. open-falcon-agent插件使用

    说明 Plugin可以看做是对agent功能的扩充.使用插件可以对采集脚本进行统一管理,方便定制修改,也可以免去在crontab中添加计划任务. 开启plugin功能 # 修改agent配置文件 &q ...

  10. String,StringBuffer,StringBuilder的区别

    数据结构: 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合. 比如数据库就是对硬盘中的数据进行有规则的管理,可以进行增删改查工作,而良好的数据结构可以优化这些操作, 也许大家会想这些和St ...