Day31.管理员注册功能
1.管理员注册功能_代码导入及执行流程
2.管理员注册功能_管理员视图下register功能
from interface import admin_interface # todo 管理员注册 def register(): while True: admin_username = input('请输入用户名:').strip() admin_password = input('请输入密码:').strip() admin_re_password = input('请确认密码:').strip() # todo 小的逻辑判断 if admin_password == admin_re_password: # 调用接口层,管理员注册接口 flag, msg = admin_interface.admin_register_interface( admin_username, admin_password ) if flag: print(msg) break else: print(msg) else: print('两次密码不一致,请重新输入')
3.管理员注册功能_管理员注册接口admin_interface.py下的admin_register_interface功能
'''管理员接口''' from db import models # todo 管理员注册接口 def admin_register_interface(admin_username, admin_password): # todo 1.判断用户是否存在 # todo 调用Admin类中的,select方法,有该方法去调用db_handler中的select_data功能获取对象 admin_obj = models.Admin.select(admin_username) # todo 1.1)若存在不允许注册,返回用户已存在给视图层 if admin_obj: return False, '管理员用户已存在!' else: # todo 1.2)若不存在则允许注册,调用类实例化得到对象并保存 admin_obj = models.Admin(admin_username, admin_password) # todo 对象调用save() 会将admin_obj传给save方法 admin_obj.save() return True, '管理员注册成功!'
4.管理员注册功能_models.py存放各种类,其中Admin类调用db_handler.py中的方法
'''用于存放类的 学校类、学员类、课程类、讲师类、管理员类 ''' from db import db_handler class Admin: # todo 调用类的时候触发 # todo admin_username, admin_password def __init__(self, user, pwd): self.user = user self.pwd = pwd # todo 定义一个数据保存方法 def save(self): # todo 调用db_handler中的save方法,并且需要对其中的方法做传值,即添加self # todo 让db_handler中的save_data进行保存对象数据 db_handler.save_data(self) # todo 定义一个数据查找方法 @classmethod def select(cls, username): # 接收到Admin和username # todo obj: 对象 OR None obj = db_handler.select_data(cls, username) return obj
5.管理员注册功能_db_handler.py存放操作数据保存和查询的功能代码
''' 用于保存对象与获取对象 ''' import os from conf import settings import pickle # todo 保存数据 def save_data(obj): # todo 1. 获取对象的保存文件夹路径 # todo 以类名 当作 文件夹的名字 # todo obj.__class__:获取当前对象的类,即models.py中调用该方法的类 # todo obj.__class__.__name__:获取当前类的名字,即models.py中调用该方法的类名 class_name = obj.__class__.__name__ user_dir_path = os.path.join( settings.DB_PATH, class_name ) # todo 2.判断文件夹是否存在,不存在则创建文件夹 if not os.path.exists(user_dir_path): os.mkdir(user_dir_path) # todo 3.拼接当前用户的pickle文件路径,以用户作为文件名 user_path = os.path.join( user_dir_path, obj.user # 当前用户名字 ) # todo 4.打开文件,保存对象,通过pickle with open(user_path, 'wb') as f: pickle.dump(obj, f) # todo 查看数据 def select_data(cls, username): # 拿到models.py中刚传过来的类名(即文件夹名称)和username, # todo 有cls获取类名 class_name = cls.__name__ user_dir_path = os.path.join( settings.DB_PATH, class_name ) # todo 2.判断文件夹是否存在,不存在则创建文件夹 if not os.path.exists(user_dir_path): os.mkdir(user_dir_path) # todo 3.拼接当前用户的pickle文件路径,以用户作为文件名 user_path = os.path.join( user_dir_path, username # 当前用户名字 ) # todo 4.判断文件如果存在,再打开,并返回,若不存在,则代表用户不存在 if os.path.exists(user_path): # todo 5.打开文件,获取对象 with open(user_path, 'rb') as f: obj = pickle.load(f) return obj else: return None
6.管理员注册功能_settings.py中配置根目录和存储文件的完整目录
import os # todo 获取项目根目录 BASE_PATH = os.path.dirname( os.path.dirname(__file__) ) # todo 拼接数据存储文件夹目录 DB_PATH = os.path.join( BASE_PATH, 'db' )
7.管理员注册功能_管理员用户注册功能运行结果