Day32.老师选择课程功能

1.老师选择课程功能_代码及执行流程

2.老师选择课程功能_老师视图层中choose_course功能

'''老师视图'''
from lib import common
from lib import common_interface
from interface import teacher_interface

# todo 全局记录用户登陆状态
teacher_info = {'user': None}


# todo 选择教授课程
@common.auth('teacher')
def choose_course():
    while True:
        # todo 1. 先打印所有学校,并选择
        flag, school_list = common_interface.get_all_school_interface()
        if not flag:
            print(school_list)
            break
        for index, school_name in enumerate(school_list):
            print('编号:{}     学校名:{}'.format(index, school_name))
        choice = input('请输入选择的学校编号:').strip()
        if not choice.isdigit():
            print('输入有误')
            continue
        choice = int(choice)
        if choice not in range(len(school_list)):
            print('输入编号有误!')
            continue
        # todo 获取选择的学校名称
        school_name = school_list[choice]


        # todo 2. 从选择的学校中获取所有的课程
        flag2, course_list = common_interface.get_course_in_school_interface(
            school_name
        )
        if not flag2:
            print(course_list)
            break
        for index2, course_name in enumerate(course_list):
            print('编号:{}     学校名:{}'.format(index2, course_name))
        choice = input('请输入选择的课程编号:').strip()
        if not choice.isdigit():
            print('输入有误')
            continue
        choice = int(choice)
        if choice not in range(len(course_list)):
            print('输入编号有误!')
            continue
        # todo 获取选择的学校名称
        course_name = course_list[choice]
        # todo 3. 调用选择教授课程接口,将该课程添加到老师课程列表中
        flag3, msg = teacher_interface.add_course_interface(
            course_name, teacher_info.get('user')
        )
        if flag3:
            print(msg)
            break
        else:
            print(msg)

3.老师选择课程功能_老师接口层中老师添加课程接口add_course_interface功能

'''老师接口层'''
from db import models

# todo 老师添加课程接口
def add_course_interface(course_name, teacher_name):
    # todo 1. 获取当前老师对象
    teacher_obj = models.Teacher.select(teacher_name)

    # todo 2. 判断当前课程是否在老师的课程列表中
    course_list = teacher_obj.course_list_from_tea
    if course_name in course_list:
        return False, '该课程已存在'
    # todo 3. 若不存在,则添加该课程到老师课程列表中
    else:
        teacher_obj.add_course(course_name)
        return True, '添加课程成功'

4.老师选择课程功能_功能类中的老师类Teacher类

'''用于存放类的
学校类、学员类、课程类、讲师类、管理员类
'''
from db import db_handler

# todo 提供select和save方法写入父类, 让所有子类都继承
class Base:
    # todo 定义一个数据查找方法 ----> 登录、查看数据
    @classmethod
    def select(cls, username):      # 接收到类Admin和username
        # todo obj: 对象 OR None
        obj = db_handler.select_data(
            cls, username)
        return obj

    # todo 定义一个数据保存方法 ----> 注册、保存、更新数据
    def save(self):
        # todo 调用db_handler中的save方法,并且需要对其中的方法做传值,即添加self
        # todo 让db_handler中的save_data进行保存对象数据
        db_handler.save_data(self)

# todo 老师类
class Teacher(Base):
    def __init__(self, teacher_name, teacher_pwd):
        self.user = teacher_name
        # todo self.pwd 需要统一
        self.pwd = teacher_pwd
        self.course_list_from_tea = []

    # todo 老师查看教授课程方法
    def show_course(self):
        return self.course_list_from_tea

    # todo 老师添加课程方法
    def add_course(self, course_name):
        self.course_list_from_tea.append(
            course_name)
        self.save()

5.老师选择课程功能_db_handler中用于保存和获取对象

'''
用于保存对象与获取对象
'''
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.老师选择课程功能_公共接口中获取所有学校名称类和获取某学校下所有的课程接口

'''公共接口'''
import os
from conf import settings
from db import models

# todo 获取所有学校名称接口
def get_all_school_interface():
    # todo 1. 获取学校文件夹路径
    school_dir = os.path.join(
        settings.DB_PATH, 'School'
    )

    # todo 2. 判断文件夹是否存在
    if not os.path.exists(school_dir):
        return False, '没有学校,请先联系管理员'
    
    else:
        # todo 3. 文件夹若存在,则获取文件夹中所有的文件的名字
        school_list = os.listdir(school_dir)
        return True, school_list

# todo 获取学校下所有课程接口
def get_course_in_school_interface(school_name):
    # todo 1. 获取学校对象
    school_obj = models.School.select(school_name)

    # todo 2. 获取学校对象下所有的课程
    course_list = school_obj.course_list
    if not course_list:
        return False, '该学校没有课程'
    else:
        return True, course_list

7.老师选择课程功能_程序运行结果

posted on 2024-07-10 17:35  与太阳肩并肩  阅读(5)  评论(0编辑  收藏  举报

导航