注册登录系统_类实现
难度:⭐⭐⭐
1. 题目描述
题目描述
用类封装一个可注册&登录的后台系统 要求:
- 能登录
判断是否注册,没有则不能登录,接着提示重新输入
账号存在后继续判断密码是否正确
账号密码以 json 格式存到文件中 - 能注册
账号是手机号
密码长度必须大于等于 6,小于等于 12;且只能是数字跟字母组合 - 可重复
- 可退出
2. 关键点
- 字符串操作
- json 与 dict 转换
- class 类概念
3. 代码实现
点击显示代码
python
import os
import json
db = './db.json'
class XiTong():
def __init__(self):
"""初始读取密码文件"""
self.data = self.get_db()
def save_db(self):
"""保存账号密码"""
if not self.data:
return
with open(db, 'w') as f:
f.write(json.dumps(self.data))
def get_db(self):
"""读取账号密码"""
if not os.path.isfile(db):
with open(db, 'w') as f:
f.write('')
# os.mknod(db)
with open(db) as f:
data = f.read()
if data:
data = json.loads(data)
else:
data = {}
return data
def login(self, username, password):
"""登录"""
if username not in self.data:
print('账号尚未注册,请重新输入')
return False
if password != self.data[username]:
print('账号不正确,请重新输入')
return False
print('登录成功')
return True
def register(self, username, password):
"""注册"""
if self.check_username(username) and self.check_password(password):
self.data[username] = password
print('注册成功')
return True
return False
def exit(self):
"""退出"""
print('欢迎下次光临')
def check_username(self, username):
"""检测用户名
1. 长度检测
2. 手机号必须 1 开头
3. 组成检测
"""
if len(username) != 11:
print('长度不对,请输入正确的11位手机号')
return False
if username[0] != '1':
print('只能1开头,请输入正确的11位手机号')
return False
# for c in username[1:]:
# if c not in range(10):
# print('非数字,请输入正确的11位手机号')
# break
if not username.isdigit():
print('非数字,请输入正确的11位手机号')
return False
return True
def check_password(self, password):
"""检测密码
1. 长度检测
2. 组成检测
"""
if not (6 <= len(password) <= 12):
print('密码长度必须在 6~12 之间')
return False
if not password.isalnum():
print('密码只能是数字或字母')
return False
return True
def run(self):
help_text = [
'1. 我要注册',
'2. 我要登录',
'3. 我要退出',
]
while True:
action = input('{}\n请输入序号选择你需要的操作:'.format('\n'.join(help_text)))
action = int(action)
if action == 1:
while True:
username = input('请输入手机号:')
password = input('请输入密码:')
res = self.register(username, password)
if res is True:
break
elif action == 2:
while True:
username = input('请输入手机号:')
password = input('请输入密码:')
res = self.login(username, password)
if res is True:
break
elif action == 3:
self.exit()
break
self.save_db()
if __name__ == '__main__':
xt = XiTong()
xt.run()
4. 运行示例
txt
1. 我要注册
2. 我要登录
3. 我要退出
请输入序号选择你需要的操作:1
请输入手机号:18101052222
请输入密码:python123
注册成功
1. 我要注册
2. 我要登录
3. 我要退出
请输入序号选择你需要的操作:2
请输入手机号:18101052222
请输入密码:python-abc
账号不正确,请重新输入
请输入手机号:18101052222
请输入密码:python123
登录成功
1. 我要注册
2. 我要登录
3. 我要退出
请输入序号选择你需要的操作:3
欢迎下次光临
5. 进阶思考
- 添加其它功能,比如查询注册人数
- 添加其它信息,比如邮箱、姓名等等
- 密码加密保存到文件