db--文件夹
Admin---存放文件的目录
Student---存放文件的目录
db_handler.py ----存储函数
models.py---面向对象的存储
-----------------------------
models.py
"""
用于存放类的
学校类,学员类,课程类,讲师类,管理员类
"""
from db import db_handler
class Base:
# 查看数据--->登录,查看数据库
@classmethod
def select(cls, username): # Admin,username
# obj:对象 or None
obj = db_handler.select_data(cls, username)
return obj
# 保存数据---》注册,保存,更新数据
def save(self):
# 让db_handler中的save_data帮我保存对象数据
db_handler.save_data(self)
#管理员类,实现功能:
# -管理视图
# -1.注册
# -2.登录
# -3.创建学校
# -4.创建课程
# -5.创建讲师
class Admin(Base):
# username,password,注意这里的user是固定的,后续的类里也是固定的
def __init__(self,user,pwd):
self.user=user
self.pwd=pwd
#创建学校
def create_school(self,school_name,school_addr):
"""该方法内部来调用学校类实例化得到对象,并保存"""
school_obj=School(school_name,school_addr)
school_obj.save()
# 创建课程
def create_course(self,school_obj,course_name):
#1.调用课程类,实例化创建课程
course_obj=Course(course_name)
course_obj.save()
#2.获取当前学校对象,并将课程添加到课程列表中
school_obj.course_list.append(course_name)
#3.更新学校数据
school_obj.save()
#创建讲师
def create_teacher(self,teacher_name,teacher_pwd):
#1.调用老师类,实例化得到老师对象,并保存
teacher_obj=Teacher(teacher_name,teacher_pwd)
teacher_obj.save()
#学校类
class School(Base):
def __init__(self,name,addr):
#必须写self.user
#因为db_handler里面的select_data统一规范
self.user=name
self.addr=addr
#课程列表:每所学校都应该有相应的课程
self.course_list=[]
# 学生类
class Student(Base):
def __init__(self,user,pwd):
self.user=user
self.pwd=pwd
#每个学生只能有一个校区
self.school=None
#一个学生可以选择多门课程
self.course_ist=[]
#学生课程分数
self.score={} #{"course_name":0}
#学生添加学校的方法
def add_school(self,school_name):
self.school=school_name
self.save()
#学生添加学校的方法
def add_school(self,school_name):
self.school=school_name
self.save()
#学生添加课程的方法
def add_course(self,course_name):
#1.学生课程列表添加课程
self.course_ist.append(course_name)
#2.给学生选择的课程设置默认分数
self.score[course_name]=0
self.save()
#3.学生选择的课程对象,添加学生
course_obj=Course.select(course_name)
course_obj.student_list.append(self.user)
course_obj.save()
#课程类
class Course(Base):
def __init__(self,course_name):
self.user=course_name
self.student_list=[] #课程下有哪些学生
#老师类
class Teacher(Base):
def __init__(self,teacher_name,teacher_pwd):
self.user=teacher_name
self.pwd=teacher_pwd
self.course_list_from_tea=[]
#老师查看教授课程的方法
def show_course(self):
return self.course_list_from_tea
#老师添加课程方法
def add_course(self,course_name):
self.course_list_from_tea.append(course_name)
self.save()
#老师获取课程下学生方法
def get_student(self,course_name):
course_obj=Course.select(course_name)
return course_obj.student_list
#老师修改学生分数方法
def change_score(self,course_name,student_name,score):
#1.获取学生对象
student_obj=Student.select(student_name)
#2.在给学生对象中的课程修改分数
student_obj.score_dic[course_name]=score
student_obj.save()db_handler.py
-------------------------
"""
用户保存对象与获取对象
"""
import os
import pickle
from conf import settings
# 保存数据
def save_data(obj):
"""
1.获取对象的保存文件夹路径
以类名当做 文件夹的名字,例如管理员的所在文件夹就是Admin
obj.__class__:获取当前对象的类
obj.__class__.__name__:获取类的名字
:return:
"""
class_name=obj.__class__.__name__
user_dir_path=os.path.join(
settings.DB_PATH,class_name
)
# 2.判断文件夹是否存在,不存在就是创建文件夹
if not os.path.exists(user_dir_path):
os.mkdir(user_dir_path)
# 3.拼接当前用户的pickle文件路径,以用户名作为文件名
user_path=os.path.join(
user_dir_path,obj.user # 当前用户的名字
)
# 4.打开文件,保存对象,通过pickle
with open(user_path,"wb")as f:
pickle.dump(obj,f)
#查看数据
# 参数为类,username
def select_data(cls,username):
# 由cls类获取类名
class_name=cls.__name__
user_dir_path=os.path.join(
settings.DB_PATH,class_name
)
#2.判断文件夹是否存在,不存在则创建文件夹
if not os.path.exists(user_dir_path):
os.mkdir(user_dir_path)
#3.拼接当前用户的pickle文件路径,以用户名作为文件名
user_path=os.path.join(
user_dir_path,username
)
#4.判断文件如果在,在打开,并返回,如果不再,代表用户不存在
if os.path.exists(user_path):
with open(user_path,'rb')as f:
obj=pickle.load(f)
return obj
















