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 ...
随机推荐
- java反射机制的理解
反射机制是什么概念?大多都有介绍,指的是程序在运行状态中,能够加载一个只有类名的类,加载完之后会在堆上产生一个Class对象.通过这个 Class对象可以获得类的属性.方法和其他类信息.之前对反射的应 ...
- gson转换对象为json字符串时对特殊字符编码的问题
使用google的gson进行object和json的转换,如下: public static String object2json(Object obj) { Gson gson = new Gso ...
- html中一些莫名的空格
我们日常用编辑器编辑代码的时候,为了让代码的可读性更高,通常会有换行,空格或者tab键(bootstrap的规则中非常不建议这样做,不过为了方便,我还是比较习惯这样来缩进)的操作. 而这些也就造成了一 ...
- CF&&CC百套计划1 Codeforces Round #449 A. Nephren gives a riddle
http://codeforces.com/contest/896/problem/A 第i个字符串嵌套第i-1个字符串 求第n个字符串的第k个字母 dfs #include<map> # ...
- 浏览器内核控制meta name="renderer" 说明文档
https://blog.csdn.net/adc_god/article/details/51531263
- C 语言中指针初始化为字符串常量 不可通过该指针修改其内容
char b[] = "hello"; 则“hello”存于栈中,因为定义的是一个数组. char *b = "hello"; 则"hello&quo ...
- vue_列表渲染
vue列表渲染 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- git之合并分支(git merge)------(三)
最近几天写小demo,总是自己拉取他人的代码,然后创建分支,在自己的分支上进行修改,然后提交到自己的分支,具体的这一步,我就不多讲了,因为在我的博客“工作中常用的Git操作”中有详细的介绍,今天主要讲 ...
- ispoweroftwo 判断2的次幂
首先结果是: public bool IsPowerOfTwo(int n) { if(n<1) return false;//2的次幂一定大于0 return ((n & (n -1) ...
- redis从入门到放弃 -> 部署方案
单点部署方案 环境准备: [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@ ...