管理员视图
管理员注册功能
"第一层"
注册功能:
获取用户名密码
确认密码
判断两次密码是否一致
调用 接口层 并传参 用户名与密码
===================================================================================
"第二层"
注册接口:
调用 models查询对象功能 获取对象 # 先去定义产生管理员对象的类
判断对象是否存在
密码加密 # 定义加密公共功能
生成对象并保存 # 生成对象时自动保存
管理员登录功能
"第一层"
登录功能:
获取用户名密码
调用接口层
获取接口层返回值判断是否为True
True 则记录用户登录信息
打印返回值
===================================================================================
"第二层"
登录接口:
调用 models查询对象功能
判断对象是否不存在
对比加密后密码是否一致
返回 信息
管理员创建学校功能
"第一层"
创建学校功能:
获取学校名与地址
调用管理员创建学校接口
===================================================================================
"第二层"
创建获取所有学校名接口:
用学校对象调用查询对象名功能获取对象列表
判断是否有值
返回 对象列表
'配合使用'
创建学校接口:
调用 models查询对象功能
判断是否已存在
获取管理员对象
管理员对象调用管理员创建学校功能
===================================================================================
管理员创建课程功能
"第一层"
创建课程功能:
调用获取所有学校名接口,获取所有学校列表
判断是否有值
循环打印
for循环枚举学校名列表
获取用户输入学校编号
判断是否是数字
转 整型
判断是否超出范围 range
按编号获取学校名
获取创建的课程名,课程价格,课程周期
调用创建课程接口 并传参 学校名,课程名,课程价格,课程周期,管理员名
===================================================================================
"第二层"
创建课程接口:
获取学校对象
判断学校关联的课程表里有没有此课程
获取管理员对象
使用管理员创建课程功能
学校对象课程列表 添加课程名
保存学校对象 更新资料
管理员创建讲师功能
"第一层"
创建讲师功能:
获取老师名
调用创建讲师接口
===================================================================================
"第二层"
创建讲师接口:
获取讲师对象
判断是否存在
获取管理对象
调用管理员创建讲师功能
学生视图
学生注册功能
"第一层"
1.注册功能
获取学生名密码
确认密码
判断密码是否一致
调用 学生注册接口
===================================================================================
"第二层"
.注册接口:
获取学生对象判断是否已存在
密码加密
调用学生类产生对象保存
学生登录功能
"第一层"
登录功能
获取学生名密码
调用登录接口
返回 True 记录 学生登录信息
===================================================================================
"第二层"
2.登录接口:
获取学生对象判断是否不存在
判断加密后密码是否一致
学生选择学校功能
"第一层"
学生选择学校:
调用查询对象名接口获取学校列表
判断 是否有值
返回 False 打印返回值
循环打印学校名
获取学校编号
判断是否是数字
转数字
判断是否超出范围
根据编号获取学校名
调用选择学校接口保存学校
===================================================================================
"第二层"
查询学校对象接口:
使用学校类 .查询所有名字功能 获取学校名列表
判断是否没值
返回学校名列表
选择学校接口:
获取学生对象
判断学生是否已有学校
修改学生对象的学校
保存学生对象 使用学生对象.保存功能
学生选择课程功能
"第一层"
学生选择课程:
获取当前登录学生学校的课程表 调用查看学生对象接口
判断没值打印返回值
定义一个空的课程列表
循环
打印枚举学生的课程表
获取学生课程编号
# 退出时判断 临时课程列表是否为空
# 退出选课 将临时列表与学生名传入第二层选择课程接口
判断是否是数字,转整型,判断是否超出范围
根据编号获取课程名称
判断是否已存在临时列表内,不存在则新增
===================================================================================
"第二层"
查询学校对象接口:
获取学生对象
判断学生对象的学校是否没有值
获取学生对象绑定的学校对象
返回学校对象的课程表
选择课程接口:
获取学生对象
获取学生对象的课程表(转集合去重)
使用视图层传过来的新课程表(转集合去重)
两表相加去重 | 并转列表
学生成绩初始化 使用{课程名:成绩}的方式
# 循环获取课程表内的课程名,给课程名添加 成绩
保存 学生对象
课程绑定学生
循环获取课程表内的课程名
获取课程对象
给课程对象的学生列表增加学生名
保存 课程对象
学生查看分数功能
"第一层"
学生查看分数:
调用第二层查看分数接口
===================================================================================
"第二层"
查看分数接口:
获取学生对象
判断学生对象的分数表是否没数据
返回学生分数列表
讲师视图
讲师登录功能
"第一层"
登录功能
获取讲师名与密码
调用第二层登录接口判断返回值是否为 True
True 则记录登录信息
打印返回值
===================================================================================
"第二层"
登录接口:
获取老师对象
判断是否不存在
对比密码是否正确
返回结果
讲师查看课程功能
"第一层"
讲师查看课程:
获取所有学校名调用第二层接口
判断
循环打印学校名
获取学校编号
判断 数字 转整型 超出范围
按编号获取学校名称
调用第二层接口查询当前学校下所有课程名
判断是否为 False
循环打印课程名
===================================================================================
"第二层"
查询所有学校名接口:
获取学校列表 调用第三层查看 目录下 所有对象名功能
判断是否为空
返回结果
查看课程接口:
获取学校对象
判断是否为空
返回学校对象的课程表
讲师选择课程功能
"第一层"
讲师选择课程:
获取所有课程名调用第二层接口
判断是否没值
定义临时课程列表
循环打印课程名
获取课程编号
退出时判断临时课程表是否为空
将列表与讲师传第二层查看分数接口
判断 数字 转整型 超出范围
根据编号获取课程名
判断该课程是否已存在
添加到临时课程表里
===================================================================================
"第二层"
4.查看所有课程接口:
获取课程列表 调用第三层查看 目录下 所有对象名功能
判断
返回列表
5.选择课程接口:
获取老师对象
获取老师对象的课程表(转集合去重)
使用视图层传过来的新课程表(转集合去重)
两表相加去重 | 并转列表
保存老师课程列表
# 课程绑定讲师
for循环课程表
获取课程对象
课程对象的讲师表增加讲师
保存课程对象
讲师查看分数功能
"第一层"
讲师查看分数:
获取当前讲师的课程表列表
判断
循环打印课程名
获取课程编号
退出时return
判断 数字 转整型 超出范围
根据编号获取课程名
调用第二层查看分数接口
===================================================================================
"第二层"
查看讲师课程表接口:
获取讲师对象
判断
返回讲师对象的课程表
查看课程下绑定学生分数接口:
获取课程对象
获取课程绑定的学生列表
判断
循环获取学生列表里的学生名 并按名字获取学生绑定的分数字典get当前课程名的分数
讲师修改分数功能
"第一层"
讲师修改分数:
获取当前讲师课程表 调用二层
判断
循环打印课程名
获取课程编号
退出时return
判断 数字 转整型 超出范围
根据编号获取课程名
调用查询当前课程下学生接口 获取学生列表
判断
循环打印学生名
获取学生编号
判断 数字 转整型 超出范围
根据编号获取学生名
获取讲师输入该学生的分数
调用第二层修改分数接口 传 学生名,课程名,分数,讲师名
===================================================================================
"第二层"
获取课程下绑定学生列表接口:
获取课程对象
获取课程绑定的学生列表
判断
返回学生列表
修改分数接口:
获取学生对象
修改学生对象绑定的分数列表里的分数
保存学生对象
models 层
父类:
1.定义保存对象的方法
2.绑定给类的方式 定义查询对象的方法
定义管理员类:
定义管理员属性
定义管理员创建学校对象的功能(绑定给类的方法)
生成对象时自动保存对象
定义管理员创建学校功能
产生学校对象
定义管理员创建课程功能
产生课程对象
定义管理员创建老师功能
产生老师对象
定义学校类:
定义学校属性 # 关联课程
生成对象时自动保存对象
定义课程类:
定义课程属性
课程关联学生
课程关联老师
生成对象自动保存
定义老师类:
定义老师属性
老师关联课程
生成对象自动保存
定义学生类:
定义学生属性
学生关联学校 = None
学生关联课程
学生关联分数字典
生成对象自动保存
common公共功能层
创建加密函数
def get_hash(msg):
md5 = hashlib.md5()
md5.update(msg.encode('utf8'))
return md5.hexdigest()
创建验证登录装饰器
# 验证登录装饰器
def login_auth(user_type):
def outer(func_name):
def inner(*args, **kwarg):
# 调入模块
from conf import settings
# 判断 有参参数 是不是在视图功能字典里
if user_type not in settings.MODULE_DICT:
return False, '不存在的视图'
# 拿到该视图的名字
module_name = settings.MODULE_DICT.get(user_type)
# 判断该视图的is_login 是否有值
if module_name.is_login.get('username'):
res = func_name(*args, **kwarg)
return res
esle:
print('请先登录')
module_name.login()
return inner
return outer
配置文件settings
1. 创建db目录
动态获取根目录路径
拼接db文件路径
判断是否存在
不存在则创建
2.定义全局变量字典
存放各个视图层
db_handler
定义保存对象功能
以类名拼接用户目录 对象名.__class__.__name__
判断是否存在
拼接用户文件名
打开文件使用pickle模块写入对象
定义查询对象功能
以类名拼接目录路径
判断是否存在
拼接用户文件
打开文件 并 返回对象
定义查询所有对象名功能
拼接类名对应的目录路径
os.listdir 获取所有名字并返回