任务说明:

  (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. Ipython的安装/ipython notebook的简单使用

    安装了pyhton的windows版的shell好久了,今天才听说Ipython这个东西,确实在windows下的python shell很难用,一旦输入错误就要重新来过 了解了下ipython,然后 ...

  2. appium GUI介绍

    Appium作为APP端的自动化测试工具,具有很多的有点,今天主要介绍一下它的UI界面,包含其中的一些参数等.主要说的是windows下的APPIUM GUI. 先看一眼它的界面(版本为1.4.16. ...

  3. Python CRM项目六

    自定义Django Admin的action 在Django Admin中,可以通过action来自定义一些操作,其中默认的action的功能是选中多条数据来进行删除操作 我们在king_admin中 ...

  4. Effective Java 之-----静态工厂与构造器

    一. 考虑用静态工厂方法代替构造器: 1)静态工厂方法与构造器不同的第一大优势在于:他们有名称.当一个类需要多个带有相同签名的构造器时,就用静态方法代替构造器,并慎重的选择名称以突出他们间的区别: 2 ...

  5. jsBOM内容

    正如我们所知道的,javascript分为三大块,ECMAscript,BOM,DOM,ECMAscript固然重要:可是在web中使用ECMAscript很大程度上需要了解BOM即浏览器对象模型,否 ...

  6. 图说:为什么Java中的字符串被定义为不可变的

    8张图,看懂Java字符串的不变性 字符串,想必大家最熟悉不过了,通常我们在代码中有几种方式可以创建字符串,比如:String s = "Hollis";这时,其实会在堆内存中创建 ...

  7. Springboot security cas整合方案-实践篇

    承接前文Springboot security cas整合方案-原理篇,请在理解原理的情况下再查看实践篇 maven环境 <dependency> <groupId>org.s ...

  8. BZOJ 1845: [Cqoi2005] 三角形面积并 [计算几何 扫描线]

    1845: [Cqoi2005] 三角形面积并 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 1151  Solved: 313[Submit][Stat ...

  9. HDU3488 Tour [有向环覆盖 费用流]

    Tour Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submis ...

  10. EntityFramework 实践 Overview

    使用EntityFramework,是微软出的一个轻量级ORM框架,对于做一些小型的项目非常方便,几乎是零配置,以及对linq的支持,所以非常的易于使用,虽然已经使用EntityFramework很久 ...