增加用户登录和登岸胜利首页
4.1 开发需求
用户登岸页面,查抄用户名和密码。
用户名和码准确,跳转到首页页面
4.2 常识点:
文件读取和遍历
字符串处置与字段拆分split strip
利用异常昌盛与捕捉raise except 语句
页面联动用于参数传递
4.3 代码
4.3.1 登岸页面代码,login.py
# -*- coding:utf-8 -*-
"""
项目名称:register
做者:Spring
模块描述:
用户注册模块
日期:2022年03月15日
"""
import os
import hashlib
from getpass import getpass # 导入密码库
from applogger import logger # 导入日记的笔,用于写入日记信息
import homepage
def show():
logger.info(------进入login页面------)
max_length = 60
MESSAGES = [
用户登岸
]
print(* * max_length)
for msg in MESSAGES:
print({0:^{1}s}.format(msg, max_length - (len(msg.encode(utf-8)) - len(msg))//2))
print(* * max_length)
# 用户登岸页面信息展现完成
# 领受用户输入的用户名和密码
# 1、输入用户名
while True:
inStr = input(>>>>>>请输入用户名:)
# 只要用户名输入有内容,就通过
if inStr:
username = inStr
break
else:
print(用户名不克不及为空,请从头输入...)
logger.debug(用户名:{}.format(username))
# 2、输入密码
while True:
inStr = getpass(>>>>>>请输入密码:)
# 只要用户名输入有内容,就通过
if inStr:
password = inStr
break
else:
print(密码不克不及为空,请从头输入...)
logger.debug(密码:{}.format(password))
# 判断用户输入的准确性,查抄用户名和密码
file_name = Userinfo.dbx
# 用try捕捉异常,停止处置
try:
# 读取用户信息
# 以r的体例翻开文件,停止文件读取操做
if os.path.exists(file_name):
with open(file_name, r, encoding=utf-8) as rf:
file_lines = rf.readlines() # 读取出来的是一个列表
# 找到用户名对应的用户信息
for line in file_lines:
is_checked = False # 查抄的标识为
# 用户存在,判断密码
if line.split(|*|)[1] == username:
# 比照密码能否准确
f_password = line.split(|*|)[2] # 提取用户信息中的密码
# 加密后的密码
encrypt_password = hashlib.md5((username+password).encode(utf-8)).hexdigest()
if f_password == encrypt_password:
# 用户名和密码查抄通过
is_checked = True
userid = line.split(|*|)[0]
realname = line.split(|*|)[3]
logindate = line.split(|*|)[8].strip() # 去掉末尾的\n
break # 只要找到用户名,就退出轮回,进步代码效率
else:
# 用户信息文件不存在,提醒先注册
raise NameError(请先注册。)
# 欠亨过抛出异常
if is_checked is not True:
raise PermissionError(用户名或密码错误。) # 抛出权限错误
input(登岸胜利...肆意键继续)
# 跳转到登岸后的主页面
os.system(cls)
homepage.show(userid, username, realname, logindate) # 返回欢送页面
except Exception as e:
logger.exception(e) # 打印出仓库的信息,把出错的信息显示到日记里
input(str(e) + ...按肆意键继续)
os.system(cls) # 清屏
show() # 再从头输入
if __name__ == __main__:
show()
4.3.2 首页代码,homepage.py
# -*- coding:utf-8 -*-
"""
项目名称:welcome
做者:Spring
模块描述:
登岸后的首页
日期:2022年03月16日
"""
from applogger import logger # 导入日记的笔,用于写入日记信息
def show(userid, username, realname, logindate):
logger.info(------进入homepage页面------)
max_length = 60
# 1、优化后的代码
MESSAGES = [
,
f您好{realname},您是第{userid}个读者,,
欢送来到,Spring进销存办理系统(SpringSaleSystem),
请选择要进入的页面:,
出库录入(S),信息办理(I),办理元页面(A).,
f前次登岸时间:{logindate},
]
print(f当前用户:{username}({realname}),系统日期 yyyy年mm月dd日)
print(* * max_length)
for msg in MESSAGES:
print({0:^{1}s}.format(msg, max_length - (len(msg.encode(utf-8)) - len(msg)) // 2))
print(* * max_length)
4.3.3 欢送页面代码,welcome.py
# -*- coding:utf-8 -*-
"""
项目名称:welcome
做者:Spring
模块描述:
欢送界面(法式员底线,不写反复代码)
日期:2022年03月12日
"""
import datetime
import sys
import os
import register
from applogger import logger # 导入日记的笔,用于写入日记信息
import login
def show():
logger.info(------进入welcome页面------)
# 获取系统日期
date = datetime.datetime.now().date()
max_length = 60
# 1、优化后的代码
MESSAGES = [
,
欢送来到,,
Spring进销存办理系统(SpringSaleSystem),
版本号:v0.1,
开发者:springPBI,
系统日期: + str(date),
]
print(* * max_length)
for msg in MESSAGES:
print({0:^{1}s}.format(msg, max_length - (len(msg.encode(utf-8)) - len(msg)) // 2))
print(* * max_length)
print(您能够选择如下操做:)
command_line = 登岸(L),注册(R),退出(Q).
print(command_line)
# for 遍历,是在有限的数据集合长进行轮回,次数是确定的
# while 前提轮回,次数是不确定的
while True:
command = input(请输入:)
# 停止判断,只能输入小写的l,r,q
if command.lower() in [l, r, q]:
logger.debug(用户输入的指令是:{}.format(command)) # 挪用日记记录信息
break
else:
print(输入有误,请从头输入...)
if command.lower() == r:
# 挪用并展现register页面
os.system(cls) # 清空末端页面信息
register.show() # 挪用注册页面
elif command.lower() == l:
# 跳转到登岸界面
os.system(cls)
Error()
elif command.lower() == q:
# 退出系统
print(再见,欢送下次再来!)
sys.exit(0) # 法式一般退出
else:
input(您输入的指令不撑持...请联络开爆发者。)
os.system(cls)
show()