任务说明:

  (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. python 编写简单的setup.py

    学习python也已经有一段时间了,发现python作为脚本语言一个很重要的特点就是简单易用,而且拥有巨多的第三方库,几乎方方面面的库都有,无论你处于哪个行业,想做什么工作,几乎都能找到对应的第三方库 ...

  2. vim批量注释

    vim批量注释 法一.在vim中 :20,30 s/^/#/g 20-30行 用 # 注释掉.(python是用#注释地---) :20,30 s/^#//g 20-30行 取消注释 法二. 1.多行 ...

  3. 渗透测试,form对象类型转换,简单demo

    最近公司的项目在进行国家某行业的安全检测,涉及到项目安全渗透等方面的问题: 参与项目的渗透等改造,是一个机遇与挑战,今后对与项目安全等方面会思考更多: 下面说说form表单对象提交,为了防止抓包,后台 ...

  4. 【Java入门提高篇】Day13 Java中的反射机制

    前一段时间一直忙,所以没什么时间写博客,拖了这么久,也该更新更新了.最近看到各种知识付费的推出,感觉是好事,也是坏事,好事是对知识沉淀的认可与推动,坏事是感觉很多人忙于把自己的知识变现,相对的在沉淀上 ...

  5. 模型的继承 -- Django从入门到精通系列教程

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

  6. CS231n-lecture2-Image Classification pipeline 课堂笔记

    ---恢复内容开始--- 相关资源  Event Type  Date  Description  Course Materials Lecture 2 Thursday April 6 Image ...

  7. 以Apache模块的方式编译安装php-5.5.4

    新建用户及用户组 groupadd webuser useradd -g webuser webuser 下载php-5.5 下载地址:http://pan.baidu.com/s/1o6I6Lnk ...

  8. Django之wagtail安装及配置

    安装指引原文地址:Http://docs.wagtail.io/en/v1.13.1 需要注意的几点: 指定端口启动服务:在项目根目录下 ,运行 python manage.py runserver ...

  9. BZOJ 3684: 大朋友和多叉树 [拉格朗日反演 多项式k次幂 生成函数]

    3684: 大朋友和多叉树 题意: 求有n个叶子结点,非叶节点的孩子数量\(\in S, a \notin S\)的有根树个数,无标号,孩子有序. 鏼鏼鏼! 树的OGF:\(T(x) = \sum_{ ...

  10. BZOJ 3239: Discrete Logging [BGSG]

    裸题 求\(ind_{n,a}b\),也就是\(a^x \equiv b \pmod n\) 注意这里开根不能直接下取整 这个题少了一些特判也可以过... #include <iostream& ...