简介
使用装饰器登录用户。
示例
LOGIN_USER = {"is_login": False}
def wrapper(func):
def inner(*args, **kwargs):
if LOGIN_USER['is_login']:
ret = func()
return ret
else:
print("请登录!")
return inner
@wrapper
def check_roder():
pass
@wrapper
def chang_pwd():
pass
@wrapper
def manager():
print("欢迎 %s 归来!" % (LOGIN_USER['current_user']))
def login(user, pwd):
with open("database", "r", encoding='utf-8') as f:
user_list = []
for line in f:
line_str = line.strip().split("|")
user_list.append(line_str[0])
if line_str[0] == user and line_str[1] == pwd:
print("验证成功,正在登录.......")
LOGIN_USER["is_login"] = True
LOGIN_USER["current_user"] = user
manager()
return 1
if user not in user_list:
print("账户名不存在!")
return 0
return -1
def main():
flag = True
while flag:
command = input("1、后台管理;2、登录")
if command == "1":
manager()
elif command == "2":
user = input("请输入用户名:")
pwd = input("请输入密码:")
ret = login(user, pwd)
if ret == -1:
print("密码错误!")
elif ret == 1:
flag = False
if __name__ == '__main__':
main()
结果:
进阶篇(一)
管理要求:
要求:
1、必须使用装饰器,对普通用户和管理员用户的权限进行限定;
2、必须从文件中读取用户名和密码;
3、实现增、删、改、查等的功能;
代码:
首先创建Tool.py文件用于存放函数:
'''
@author: XT
'''
# -*- coding:utf-8 -*-
def check_info(email, telephone, rank):
"""
检查输入的信息格式是否正确
:param email:
:param telephone:
:param rank:
:return:
"""
if "@" not in email:
print("邮箱不合法!")
return False
elif len(telephone) != 11:
print("手机号码不合法!")
return False
elif rank not in ("1", "2"):
print("没有该等级!")
return False
return True
def get_username():
"""
获得用户名列表
:return:
"""
with open("database", 'r', encoding='utf-8')as f:
user_list = []
for line in f:
line_str = line.split("|")
user_list.append(line_str[0])
return user_list
def add_userinfo(username, password, email, telephone, rank):
"""
在原文件上追加用户信息
:param username:
:param password:
:param email:
:param telephone:
:param rank:
:return:
"""
with open("database", 'a', encoding='utf-8')as f:
f.write("\n{name}|{pwd}|{em}|{tel}|{r}".format(name=username, pwd=password,
em=email, tel=telephone, r=rank))
def register(username, password, email, telephone, rank):
"""
注册新用户信息
:param username:
:param password:
:param email:
:param telephone:
:param rank:
:return:
"""
user_list = get_username()
if username in user_list:
print("用户名已存在!请重新创建...")
return False
elif "@" not in email:
print("邮箱不合法!")
return False
elif len(telephone) != 11:
print("手机号码不合法!")
return False
elif rank not in ("1", "2"):
print("没有该等级!")
return False
else:
add_userinfo(username, password, email, telephone, rank)
return True
def chang_info(info_list):
"""
管理员修改用户信息
:param info_list:
:return:
"""
username, password, email, telephone, rank = info_list
with open("database", 'r', encoding='utf-8')as f, open("database_new", 'w', encoding='utf-8')as f_new:
for line in f:
if line.strip().split("|")[0] == username:
print("正在修改......")
f_new.write(
"{name}|{pwd}|{em}|{tel}|{r}\n".format(name=username, pwd=password,em=email,tel=telephone,r=rank))
continue
f_new.write(line)
print("修改到新文件database_new")
其次,新建主函数文件test.py
import Tool
LOGIN_USER = {"is_login": False}
def wrapper_login(func):
def inner(*args, **kwargs):
if LOGIN_USER.get('is_login',None):
ret = func(*args, **kwargs)
return ret
else:
print("请登录!")
return inner
def wrapper_priority(func):
def inner(*args, **kwargs):
if LOGIN_USER.get('current_rank',None) == "2":
ret = func(*args, **kwargs)
return ret
else:
print("对不起!你没有权限!")
exit()
return inner
@wrapper_login
@wrapper_priority
def delet_userinfo(username):
with open("database", 'r', encoding='utf-8')as f, open("database_new", 'w', encoding='utf-8')as f_new:
for line in f:
line_str = line.strip().split("|")
if line_str[0] == username:
print("正在删除:%s" % line)
continue
f_new.write(line)
print("修改到新文件database_new")
@wrapper_login
def print_info():
print("用户名:{} 密码:{} 邮箱:{} 手机号:{} 用户类型:{}".format(LOGIN_USER["current_user"],
LOGIN_USER["current_pwd"], LOGIN_USER["current_email"],
LOGIN_USER["current_telephone"],
"普通用户" if LOGIN_USER["current_rank"] == "1" else "管理员用户"))
@wrapper_login
@wrapper_priority
def manager_checkinfo(check_name):
user_list = Tool.get_username()
while check_name not in user_list:
check_name = input("用户名不存在,请重新输入用户名:")
else:
info_list = manager(check_name)
for item in info_list:
print("用户名:{} 密码:{} 邮箱:{} 手机号:{} 用户类型:{}".format(item[0], item[1],
item[2], item[3],
"普通用户" if item[4] == "1" else "管理员用户"))
return info_list
@wrapper_login
def chang_pwd():
old_pwd = input("请输入原密码:")
while old_pwd != LOGIN_USER["current_pwd"]:
print("原密码错误!请重新输入:")
old_pwd = input("请输入原密码:")
else:
new_pwd1 = input("请输入新密码:")
new_pwd2 = input("请再次输入密码:")
while new_pwd1 != new_pwd2:
print("两次输入的密码不一样!")
new_pwd1 = input("请输入新密码:")
new_pwd2 = input("请再次输入密码:")
else:
with open("database", 'r', encoding='utf-8')as f, open("database_new", 'w', encoding='utf-8')as f_new:
for line in f:
if line.strip().split("|")[0] == LOGIN_USER["current_user"]:
print("正在修改......")
f_new.write(
"{name}|{pwd}|{em}|{tel}|{r}\n".format(name=LOGIN_USER["current_user"], pwd=new_pwd2,
em=LOGIN_USER["current_email"],
tel=LOGIN_USER["current_telephone"],
r=LOGIN_USER["current_rank"]))
continue
f_new.write(line)
print("修改到新文件database_new")
@wrapper_login
@wrapper_priority
def manager(arg):
with open("database", 'r', encoding='utf-8')as f:
info_list = []
for line in f:
line_str = line.strip().split("|")
if arg in line_str:
info_list.append(line_str)
return info_list
@wrapper_login
@wrapper_priority
def manage_email(arg):
"""
查找邮箱
:param arg:
:return:
"""
with open("database", 'r', encoding='utf-8')as f:
info_list = []
for line in f:
line_str = line.strip().split("|")
if arg in line_str[2]:
info_list.append(line_str)
return info_list
def login(user, pwd):
with open("database", "r", encoding='utf-8') as f:
user_list = []
for line in f:
line_str = line.strip().split("|")
user_list.append(line_str[0])
if line_str[0] == user and line_str[1] == pwd:
print("验证成功,正在登录.......")
LOGIN_USER["is_login"] = True
LOGIN_USER["current_user"] = user
LOGIN_USER["current_pwd"] = pwd
LOGIN_USER["current_email"] = line_str[2]
LOGIN_USER["current_telephone"] = line_str[3]
LOGIN_USER["current_rank"] = line_str[-1]
print("欢迎 %s 归来!" % (LOGIN_USER['current_user']))
return 1
if user not in user_list:
print("账户名不存在!")
return 0
return -1
def main():
flag = True
while flag:
command = input("1、后台管理;2、登录;3、注册新用户\n>>")
if command == "1":
arg = input("要查询的模糊信息:")
manager(arg)
elif command == "2":
user = input("请输入用户名:")
pwd = input("请输入密码:")
ret = login(user, pwd)
if ret == -1:
print("密码错误!")
elif ret == 1:
flag = False
comop = input("要选择的操作:\n1、后台管理;\n2、查看个人信息;\n3、修改密码\n4、删除用户\n"
"5、查看用户信息\n6、修改用户信息\n7、模糊查找邮箱信息\n8、退出\n>>")
while comop != "8":
if comop == "1":
arg = input("要查询的模糊信息:")
manager(arg)
elif comop == "2":
print_info()
elif comop == "3":
chang_pwd()
elif comop == "4":
delet_name = input("要删除的用户名:")
user_list = Tool.get_username()
while delet_name not in user_list:
print("没有此用户!")
delet_name = input("请再次输入要删除的用户名:")
else:
delet_userinfo(delet_name)
elif comop == "5":
check_name = input("要查询的用户名:")
manager_checkinfo(check_name)
elif comop == "6":
check_name = input("要修改的用户名:")
info_list = manager_checkinfo(check_name)
info_list = info_list[0]#列表中的列表
print("修改前: ", info_list)
index_list = ["用户名", "密码", "邮箱", "手机号", "用户类型"]
index = input("要修改的地方:0、%s;1、%s;2、%s;3、%s;4、%s" % (index_list[0], index_list[1],
index_list[2], index_list[3], index_list[4]))
while int(index) not in (range(5)):
index = input("参数范围在:0、%s;1、%s;2、%s;3、%s;4、%s" % (index_list[0], index_list[1],
index_list[2], index_list[3],
index_list[4]))
else:
check_info_flag = False
while not check_info_flag:
change_content = input("\033[41;1m 修改的%s内容为:\033[0m" % (index_list[int(index)]))
info_list[int(index)] = change_content
check_info_flag = Tool.check_info(info_list[2], info_list[3], info_list[4])
else:
print("修改后: ", info_list)
Tool.chang_info(info_list)
elif comop == "7":
arg = input("请输入模糊的邮箱信息:")
info_list = manage_email(arg)
for item in info_list:
print("用户名:{} 密码:{} 邮箱:{} 手机号:{} 用户类型:{}".format(item[0],
item[1], item[2], item[3],
"普通用户" if item[4] == "1" else "管理员用户"))
comop = input(">>下一步要选择的操作:\n1、后台管理;\n2、查看个人信息;\n3、修改密码\n4、删除用户\n"
"5、查看用户信息\n6、修改用户信息\n7、模糊查找邮箱信息\n8、退出\n>>")
elif command == "3":
user = input("请输入注册用户名:")
pwd = input("请输入注册密码:")
email = input("请输入邮箱:")
telephone = input("请输入手机号:")
rank = input("请选择用户类型:1、普通用户;2、管理员用户")
register_result = Tool.register(user, pwd, email, telephone, rank)
if register_result:
print("注册成功!")
flag = False
else:
print("注册失败!")
if __name__ == '__main__':
main()
数据库内容为:
Admin|123456|Ad123@yahoo.com|17723498012|2
Alex|123|Alex666@gmail.com|13723498012|2
AlexTim|111|Tim888@email.com|17723498012|2
Kevin|999|Kevin278@gmail.com|13523498012|1
Daisy|888888|Dy368@gmail.com|15723498012|1
Jason|666|JS@126.com|12276543689|1
David|12389|Daivd999@126.com|13876432789|1
Nancy|16542|Nancy193@163.com|19823280428|1
非管理员示例:
管理员示例:
登录与查看个人信息示例:
修改密码示例:
修改邮箱示例:
模糊邮箱信息查找示例:
查看用户信息示例:
修改用户类型示例:
修改后: