s12-day01-work01用户登录接口
README
# README.md #
day001-work-1
@南非波波
功能实现:登录接口
流程图:

程序实现:
1.设置功能函数:
Welcome(LoginFlag):根据LoginFlage返回不同的信息
UserBlack():黑名单列表判断UsersName是否被锁定
UserBlackAdd(Users):添加UsersName到黑名单
Login(Passwd):用户登录函数
2.函数调用
Login(Passwd)函数调用UserBlack()函数,先判断UsersName是否在黑名单中;
Login(Passwd)函数根据用户输入的判断情况,调用Welcome(LoginFlag)函数返回不同的提示信息;
Login(Passwd)函数在执行满三次正常结束之后调用UserBlackAdd(Users)函数,将用户所输入Users添加到黑名单列表;
3.主函数入口:
if __name__ == '__main__':
代码地址:
https://github.com/swht/projects/tree/master/day01/work-1
博客地址:
http://www.cnblogs.com/songqingbo/p/5091808.html
测试账号:
users:qingbo
passwd:test
README
流程图:

程序代码:
login.py
#!/usr/local/env python3
'''
Author:@swht
Blog:http://www.cnblogs.com/songqingbo/
E-mail:qingbo.song@gmail.com
'''
import os,sys,time UserName = "qingbo"
UserPasswd = "test"
UserBlackPath = "./user_black.txt" def Welcome(LoginFlag):
'''欢迎信息页面'''
if LoginFlag == "True":
print ("Welcome login the System!")
if LoginFlag == "Error":
print ("Sorry,your passwd is Error!")
if LoginFlag == "False":
print ("Sorry,your userName is not have!")
if LoginFlag == "Space":
print("Sorry,your input is null!")
def UserBlack():
'''黑名单判断'''
if os.path.exists(UserBlackPath): #判断黑名单文件是否存在
FileUsers = open(UserBlackPath) #打开黑名单文件
UserBlack = FileUsers.read() #读取黑名单文件内容
FileUsers.close() #关闭黑名单文件句柄
if UserName == UserBlack: #判断黑名单列表中用户名称是否与指定userName相同
print ("Sorry,your name is in the blacklist,Please to connet the admin!")
sys.exit(1) #若相同提醒用户‘该用户在黑名单列表中’并且退出程序
def UserBlackAdd(Users):
'''黑名单列表增加'''
print ("Your name is now to add the blacklist!")
FileUsers = open(UserBlackPath,"w")
FileUsers.write(Users)
FileUsers.close()
sys.exit(0) def Login(Passwd):
'''用户登录接口函数'''
global Users
UserBlack(); #黑名单不存在或者用户名没在列表中执行while循环
while True:
Users = input("users:").strip() #获取用户输入且去除首尾空格符
if Users == '':
Welcome("Space")
break
else:
if Users == UserName: #判定用户名是否正确
Passwd = input("passwd:").strip()
if Passwd == '':
Welcome("Space")
break
else:
if Passwd == UserPasswd: #判断用户密码是否正确
Welcome("True"); #用户名和密码都正确,调用登录成功接口
time.sleep(1)
sys.exit(0)
else:
Welcome("Error"); #密码错误调用密码错误提示接口
break
else:
Welcome("False"); #用户名和密码错误调用相应提示接口
break
#main
if __name__ == '__main__':
for i in range(3): #允许用户输错3次
Login("Passwd");
if Users == '':
print("Sorry,users is null,the system is quit a later!")
time.sleep(1)
sys.exit(1)
else:
UserBlackAdd(Users);
github更新地址:
https://github.com/swht/projects/tree/master/day01/work-1
附录:优化后代码
github更新地址:https://github.com/swht/projects/tree/master/day01/work-1.1
mian.py
#!/usr/local/env python3
'''
Author:@南非波波
Blog:http://www.cnblogs.com/songqingbo/
E-mail:qingbo.song@gmail.com
''' import checkinput,login,addusers
import time,sys def main():
Choose = input('''
==============================================
欢迎光临南非波波小屋!
==============================================
[1]注册 [2]登录 [3]退出
请选择相应指令:''').strip()
if Choose == '':
print("指令不能为空,请输入正确指令!")
else:
if Choose.isdigit():
Choose = int(Choose)
if Choose >= 1 and Choose <= 3:
if Choose == 1:
addusers.AddUsers()
if Choose == 2:
login.Login()
if Choose == 3:
print("欢迎下次光临南非波波小屋!")
time.sleep(1)
sys.exit(0)
else:
print("你输入的指令已超出范围,请按照系统指令进行输入!")
else:
print("请输入正确的指令,指令为整数型数字!") #main
if __name__ =="__main__":
main()
mian.py
addusers.py
#!/usr/local/env python3
'''
Author:@南非波波
Blog:http://www.cnblogs.com/songqingbo/
E-mail:qingbo.song@gmail.com
'''
import getpass,sys,time
import checkinput,main UsersListPath = "./userslist.txt" #判断用户输入的是否符合要求
def AddUsers():
print('''
==============================================
欢迎加入南非波波小屋
==============================================''')
CountFlag1 = 0
CountFlag2 = 0
while True:
if CountFlag1 < 3:
User = input("请输入你的用户名:").strip()
if User == '':
print("你的输入为空,请重新输入!")
CountFlag1 += 1
CountFlag2 += 1
else:
if len(User) >= 4 and len(User) <= 10:
if checkinput.AddUsersList(User) == True:
print("该用户已被注册!")
else:
while True:
if CountFlag2 < 3:
Passwd1 = getpass.getpass("请输入你的密码:").strip() #getpass.getpass()可以将用户输入的密码以暗文形式实现
if Passwd1 == '':
print("你的输入为空,请重新输入!")
CountFlag2 += 1
elif len(Passwd1) < 6:
print("你的密码太简单,请重新输入!")
CountFlag2 += 1
else:
Passwd2 = getpass.getpass("请再次输入你的密码:").strip()
if Passwd1 == Passwd2:
db = {"user":User,"passwd":Passwd1}
UsersListFile = open(UsersListPath,"a")
UsersListFile.write(str(db))
UsersListFile.write('\n')
UsersListFile.close() #直接调用增加用户接口
main.main()
else:
print("你两次输入的密码不一致,请重新输入!")
CountFlag1 += 1
else:
print("你输入的错误次数已达3次!系统将返回主页!")
main.main()
else:
print("请输入4-10位字符或数字组合作为用户名!")
CountFlag1 += 1
else:
print("你输入的错误次数已达3次!系统将退出!感谢你对南非波波小屋的支持!")
time.sleep(1)
sys.exit(1) # AddUsers()
addusers.py
login.py
#!/usr/local/env python3
'''
Author:@南非波波
Blog:http://www.cnblogs.com/songqingbo/
E-mail:qingbo.song@gmail.com
'''
import sys,time,getpass
import checkinput,main def Login():
'''用户登录接口函数'''
CountFlag1 = 0 #用户输入错误次数的统计
CountFlag2 = 0 #用户输入为空的次数统计
print('''
==============================================
欢迎光临南非波波小屋
==============================================''')
while True:
if CountFlag1 < 3:
if CountFlag2 < 3:
Users = input("请输入登录用户名:").strip() #获取用户输入且去除首尾空格符
if Users == '':
print("你的输入为空,请重新输入!")
CountFlag1 += 1
CountFlag2 += 1
else:
checkinput.UserBlack(Users) #黑名单不存在
Passwd = getpass.getpass("请输入你的密码:").strip()
if Passwd == '':
print("密码不能为空,请重新入")
CountFlag1 += 1
CountFlag2 += 1
else:
if checkinput.LoginUsersList(Users,Passwd) == True:
print("%s你好,欢迎光临南非波波小屋,今天是%s" % (Users,(time.strftime('%Y-%m-%d\t%H:%M:%S',time.localtime(time.time())))))
time.sleep(1)
sys.exit(0)
elif checkinput.LoginUsersList(Users,Passwd) == False:
print("你输入的用户名不存在!请先注册后再登录!")
main.main()
else: #其他情况就报用户名或密码错误
print("你输入的用户名或密码错误!")
CountFlag1 += 1
else:
print("你输入的错误次数已达3次,系统将返回主页!")
main.main()
else:
print("你输入的错误次数已达3次,系统将退出")
if Users == '': #如果用户输入为空将直接退出
sys.exit(1)
else: #如果用户输入不为空将用户最后输入错误的users加到黑名单列表
checkinput.UserBlackAdd(Users) # Login()
login.py
checkinput.py
#!/usr/local/env python3
'''
Author:@南非波波
Blog:http://www.cnblogs.com/songqingbo/
E-mail:qingbo.song@gmail.com
'''
import os,sys,time UsersListPath = "./userslist.txt"
UserBlackPath = "./userblacklist.txt"
#获取文件内容的行数
def Countnum(filename):
files = open(filename)
data = files.read()
files.flush()
files.close()
return data.count('\n') #判断用户是否在黑名单中
def UserBlack(UserName):
'''黑名单判断'''
if os.path.exists(UserBlackPath): #判断黑名单文件是否存在
FileUsers = open(UserBlackPath) #打开黑名单文件
for UserBlack in FileUsers.readlines(): #读取黑名单文件内容
if UserName == UserBlack: #判断黑名单列表中用户名称是否与指定userName相同
print("对不起,该用户已在系统黑名单列表中,请联系管理员!")
time.sleep(1)
sys.exit(1) #若相同提醒用户‘该用户在黑名单列表中’并且退出程序
FileUsers.close() #关闭黑名单文件句柄 #将用户添加到黑名单中
def UserBlackAdd(Users):
'''黑名单列表增加'''
print("该用户将被家到系统黑名单中...")
FileUsers = open(UserBlackPath,"a")
FileUsers.write(Users)
FileUsers.close()
sys.exit(0) #判断用户是否存在userlist列表中
def AddUsersList(Users):
if os.path.exists(UsersListPath): #判断文件存在
if Countnum(UsersListPath) == 0: #判断文件内容为空
return False
else:
UsersListFile = open(UsersListPath,'r')
for lines in UsersListFile.readlines():
db = lines.strip("\n").strip() #去除换行符
db = eval(db) #将字符串类型转换成字典类型
if Users == db['user']:
return True #返回True值说明用户名匹配成功
UsersListFile.close()
else: #文件不存在
return False #返回False值说明黑名单文件不存在或为空 #判断用户是否存在userlist列表中
def LoginUsersList(Users,Passwd):
if os.path.exists(UsersListPath): #判断文件存在
if Countnum(UsersListPath) == 0: #判断文件内容为空
return False
else:
UsersListFile = open(UsersListPath,'r')
for lines in UsersListFile.readlines():
db = lines.strip("\n").strip() #去除换行符
db = eval(db) #将字符串类型转换成字典类型
if Users == db['user']:
if Passwd == db['passwd']:
return True #返回True值说明用户名和密码匹配成功
UsersListFile.close()
else: #文件不存在
return False #返回False值说明黑名单文件不存在
checkinput.py
s12-day01-work01用户登录接口的更多相关文章
- 齐博x1.1用户登录接口
用户的登录主要涉及到小程序登录.APP的帐号密码登录.APP的微信开发平台帐号登录.相应的地址是:http://qb.net/index.php/index/wxapp.login/index.htm ...
- ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(通过接口登录,无UI版本)
官网接口详解文档地址:文档地址 (PS:可通过接口名称搜索相应接口信息.) 源码地址:https://github.com/YANGKANG01/IdentityServer4-IdentityAut ...
- python练习--1、简易登录接口
function:用于实现简单的用户登录接口. description:用户信息存储于字典中,增加用户需手动写入代码中.最多可以尝试登录9次,首次使用会先在程序目录下创建锁文件.若在用户栏输入quit ...
- [springboot 开发单体web shop] 5. 用户登录及首页展示
用户登录及前端展示 用户登录 在之前的文章中我们实现了用户注册和验证功能,接下来我们继续实现它的登录,以及登录成功之后要在页面上显示的信息. 接下来,我们来编写代码. 实现service 在com.l ...
- Django商城项目笔记No.10用户部分-登录接口
Django商城项目笔记No.10用户部分-登录接口 添加url路由 接下来第二步,增加返回内容: 增加结果如下: 配置:上边的方法定义了返回的内容都有哪些,那这个方法jwt还不知道,需要配置: 修改 ...
- day102:MoFang:后端完成对短信验证码的校验&基于celery完成异步短信发送&flask_jwt_extended&用户登录的API接口
目录 1.用户注册 1.后端完成对短信验证码的校验 2.基于celery实现短信异步发送 2.用户登录 1.jwt登录验证:flask_jwt_extended 2.服务端提供用户登录的API接口 1 ...
- python3 用户登录 day01
'''用户登录作业需求:1. 三次重试机会2. 每次输错误时显示剩余错误次数'''num = 1while num <= 3: username = input("请输入用户名:&qu ...
- .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息
在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...
- Spring MVC学习笔记——完整的用户登录
1.搭建环境的第一步是导包,把下面这些包都导入工程中 /media/common/工作/Ubuntu软件/SpringMVC_jar包整理/aop/media/common/工作/Ubuntu软件/S ...
随机推荐
- linux(ubuntu) 安装 node.js
其实几个月之前我已经介绍过使用window版的nvm——wnvm了 1.先安装nvm 日常开发安装node通常会用nvm来安装,因为nvm可以帮我们管理好node的版本 我们通过git来把nvm下载到 ...
- JVM加载一个类的过程
类的加载过程 Java源代码被编译成class字节码,JVM把描述类数据的字节码.Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机 ...
- bootstrap使用记录
http://v3.bootcss.com/components/#panels http://v2.bootcss.com/components.html
- Nginx upstream的5种权重分配方式【转】
原文地址:Nginx upstream的5种权重分配方式 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight指定轮询几率,weig ...
- linux 自定义yum仓库、repo文件 yum命令
目录 自定义yum仓库:createrepo 自定义repo文件 使用yum命令安装httpd软件包 卸载httpd软件包:yum –y remove 软件名 清除yum缓存:yum clean al ...
- mysql手工注入步骤
1.一般用 ' " ) 等符号来闭合,再用%23(即#)来注释后面语句. 2.查找数据库,先用order by n猜字段,再用union select 1,2,3 ...n%23来查询. ...
- react 带参数事件方法不立即执行
handleClick:()=>{this.to_step('to_step3_2')}}
- MongoDB以Windows Service运行
以Administrator身份打开CMD并输入以下命令 cd D:\Developer\MongoDB\mongodb-win32-x86_64-2.4.6\binD:mongod --logpat ...
- 动态SQL中变量赋值
在动态SQL语句中进行变量的值绑定比较麻烦,这儿做个记录 declare @COUNT int,@sql nvarchar(max) set @sql = 'select @COUNT = count ...
- Dream------scala--Tuple、Array、Map与文件操作
1.Tuple(元组) 一般使用中,假设一个函数返回多个值,我们可以使用tuple接受这个(val (x,y) = myfunction) package com.wls.scala.hello /* ...