python实现用户登录注册,本地txt存储用户信息

userMapper.py(相当于Dao操作)

 

fileName = "D:/jason/workspace/python/PythonDemo/user.txt"


def writeUserInfos(userInfos, writeWay): # 写入txt内容 writeWay写入方式 "a"=追加文件内容写入 "w"=清除文件内容写入
with open(fileName, writeWay, encoding="utf8") as users:
users.write(userInfos)


def readUserInfos(): # 读取txt内容
with open(fileName, encoding="utf8") as users:
userInfos = users.readlines()
del userInfos[0] # 删除表头
return userInfos


def getUserList(): # 获取用户信息列表
userList = []
for userInfo in readUserInfos():
user = userInfo.strip().split(" ")
userLength = len(user)
username = ""
password = ""
fail_count = 0
fail_time = ""
if userLength >= 1:
username = user[0]
if userLength >= 2:
password = user[1]
if userLength >= 3:
fail_count = int(user[2])
if userLength >= 4:
fail_time = user[3]
userMap = {"username": username, "password": password, "fail_count": fail_count, "fail_time": fail_time}
userList.append(userMap)
return userList


def getUserInfo(username): # 根据用户名查询用户信息
for userInfo in getUserList():
if username == userInfo.get("username"):
return userInfo


def insertUser(user): # 新增用户信息
username = user.get("username")
password = user.get("password")
fail_count = user.get("fail_count")
if fail_count is None:
fail_count = 0
fail_time = user.get("fail_time")
if fail_time is None:
fail_time = ""
userInfos = readUserInfos() # 所有用户信息
exist = False # 用户名是否存在
for userInfo in userInfos:
userData = userInfo.strip().split(" ")
if userData[0] == username:
exist = True
break

if exist:
# updateUser(user) # 用户名已存在,则更新
raise Exception("Duplicate entry '" + username + "' for key 'PRIMARY'") # 抛异常:违反主键唯一性
else: # 用户名不存在,则新增
userData = username + " " + password + " " + str(fail_count) + " " + fail_time + "\n"
writeUserInfos(userData, "a") # 追加文件内容写入用户信息


def updateUser(user): # 更新用户信息
username = user.get("username")
password = user.get("password")
fail_count = user.get("fail_count")
fail_time = user.get("fail_time")
userInfos = readUserInfos() # 所有用户信息
for userInfo in userInfos[:]: # 遍历在新的列表操作,删除是在原来的列表操作
userData = userInfo.strip().split(" ")
userLength = len(userData)
if userData[0] == username:
if userLength >= 2:
if password is not None and len(password) > 0: # 如果password不为None并且不为空字符串,则更新
userData[1] = password
else:
password = userData[1]
if userLength >= 3:
if fail_count >= 0: # 如果fail_count>0,则更新
userData[2] = fail_count
else:
fail_count = userData[2]
if userLength >= 4:
if fail_time is not None:
userData[3] = fail_time
else:
fail_time = userData[3]

userInfos.remove(userInfo) # 删除用户信息(删除是在原来的列表操作)

userInfos.insert(0, "username password fail_count fail_time\n")
userInfos.append(username + " " + password + " " + str(fail_count) + " " + fail_time + "\n")
userData = ""
for userInfo in userInfos:
userData += userInfo

writeUserInfos(userData, "w") # 清除文件内容写入所有用户信息


def removeUser(username): # 删除用户信息(根据用户名)
userInfos = readUserInfos() # 所有用户信息
for userInfo in userInfos[:]: # 遍历在新的列表操作,删除是在原来的列表操作
user = userInfo.strip().split(" ")
if user[0] == username:
userInfos.remove(userInfo) # 删除用户信息(删除是在原来的列表操作)

userInfos.insert(0, "username password fail_count fail_time\n")
userData = ""
for userInfo in userInfos:
userData += userInfo

writeUserInfos(userData, "w") # 清除文件内容写入所有用户信息


# print(getUserInfo("jason"))

# user = {"username": "张三", "password": "6789", "fail_count": 5}
# insertUser(user)

# user = {"username": "jason", "fail_count": 9}
# updateUser(user)


# username = "jason"
# removeUser(username)
 

login.py

 


import time

from mapper import userMapper


def login(user): # 登录接口
username = user.get("username")
password = user.get("password")
user = userMapper.getUserInfo(username)
if user is not None:
fail_count = user.get("fail_count")
fail_time = user.get("fail_time")
if fail_time is not None:
fail_time = fail_time[0:fail_time.rfind("-")]
curTime = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime())
date = curTime[0:curTime.rfind("-")]
today = fail_time == date # 上次登录失败时间是否为当天时间
if fail_count >= 3 and today: # 当天登录失败三次,禁止登录
print("今天用户[" + username + "]已登录失败三次,禁止登录!")
else:
pwd = user.get("password")
if pwd == password:
print("用户[" + username + "]登录成功!")
else:
print("用户[" + username + "]登录失败!")
if today:
user["fail_count"] = fail_count + 1 # 当天登录失败,登录失败次数+1
else:
user["fail_count"] = 0 # 当天第一次登录失败,登录失败次数置为0
user["fail_time"] = curTime
userMapper.updateUser(user)
else:
print("用户[" + usename + "]不存在!")


while True:
usename = input("用户名:")
password = input("密码:")
user = {"username": usename, "password": password}
login(user)
if input("操作:") == "exit":
print("exit!")
break



register.py

 

from mapper import userMapper


def register(user): # 注册接口
username = user.get("username")
existUser = userMapper.getUserInfo(username)
if existUser is not None:
print("用户[" + usename + "]已存在!")
else:
userMapper.insertUser(user)


usename = input("用户名:")
password = input("密码:")
user = {"username": usename, "password": password}
register(user)

 


总结:自学python三天,毕竟有java的经验,初学还不觉得难,本例中涵盖了python大部分的基本操作,变量、字符串、整数、列表、字典、I/0、时间、元组等操作,哈哈希望自己可以坚持!!!

 
posted @ 2020-09-11 18:16  Jason_6wz72  阅读(1001)  评论(0)    收藏  举报