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.管理员注册功能_管理员用户注册功能运行结果

posted on 2024-06-28 18:18  与太阳肩并肩  阅读(6)  评论(0编辑  收藏  举报

导航