python学习之选课系统项目(面向对象)

选课系统:

说明:利用面向对象、以及函数写一个选课系统;主要是回顾之前所学知识包括(函数、for循环、序列化等等)

项目说明:三层架构(之前在上一篇博客中有说明:https://www.cnblogs.com/Tang-Yuan/p/13406345.html,本项目代码是在之前三层架构的数据处理层之上利用面向对象,去做后端数据处理)

代码:

start.py

 1 import os
 2 import sys
 3 from core import src
 4 
 5 # 添加环境解释器
 6 sys.path.append(
 7     os.path.dirname(__file__)
 8 )
 9 
10 # 执行项目启动
11 if __name__ == '__main__':
12     src.run()
View Code

core/src.py

 1 from core import admin
 2 from core import student
 3 from core import teacher
 4 
 5 
 6 func_dic = {
 7     '1': admin.admin_view,
 8     '2': student.student_view,
 9     '3': teacher.teacher_view,
10 }
11 
12 
13 def run():
14     while 1:
15         print('''
16         ==========选课==========
17                 1、管理员
18                 2、学生
19                 3、老师
20         ========================
21         ''')
22         choice = input("请输入要操作的编号: ").strip()
23         if choice.lower() == 'q':
24             break
25         if not choice.isdigit():
26             print('输入有误,请输入正确的编号!或者"q"结束当前操作!')
27             continue
28         if choice not in func_dic:
29             print('操作的编号不存在!请从新输入!或者"q"结束当前操作!')
30             continue
31         func_dic.get(choice)()
View Code

core/admin.py

  1 from interface import admin_interface
  2 from lib import common
  3 from interface import common_interface
  4 
  5 user_info = {'username': None}
  6 
  7 # 注册
  8 def register():
  9     # 注册用户
 10     while 1:
 11         username = input('请输入你要注册的用户名: ').strip()
 12         password = input('请输入注册用户的密码: ').strip()
 13         re_password = input('请再次输入注册用户的密码: ').strip()
 14         # 判断用户两次输入密码是否一致,如果一致则调注册接口,否则打印密码不一致
 15         if password == re_password:
 16             # 调用注册接口
 17             flag, msg = admin_interface.register_interface(username, password)
 18             if flag:
 19                 print(msg)
 20                 break
 21             else:
 22                 print(msg)
 23         else:
 24             print('两次密码不一致,请重新输入!')
 25             continue
 26 
 27 # 登录
 28 def login():
 29     while 1:
 30         # 输入要注册用户名和密码
 31         username = input('请输入要登录的用户名: ').strip()
 32         password = input('请输入登录的密码: ').strip()
 33         # 调用(公共)登录接口
 34         flag, msg = common_interface.login_interface(username, password,user_type='admin')
 35         if flag:
 36             print(msg)
 37             # 修改全局字典
 38             user_info['username'] = username
 39             break
 40         else:
 41             print(msg)
 42 
 43 # 创建学校
 44 @common.login_auth('admin')
 45 def create_school():
 46     while 1:
 47         # 输入要创建的学校和地址
 48         school_name = input('请输入要创建的学校: ').strip()
 49         school_addr = input('请输入学校地址: ').strip()
 50         # 调用创建学校接口
 51         flag,msg = admin_interface.create_school_interface(school_name,school_addr,user_info['username'])
 52         if flag:
 53             print(msg)
 54             break
 55         else:
 56             print(msg)
 57 
 58 # 创建课程
 59 @common.login_auth('admin')
 60 def create_course():
 61     while 1:
 62         # 调用获取学校信息接口
 63         flag,school_list_msg = common_interface.get_all_school_interface()
 64         # 如果不存在,则结束,否则继续执行
 65         if not flag:
 66             print(school_list_msg)
 67             break
 68         # 获取编号和对应学校名,根据枚举获取
 69         for index,school_name in enumerate(school_list_msg):
 70             print('编号:【%s】  学校名:【%s】'%(index,school_name))
 71         # 用户输入选择学校
 72         choice = input('请输入学校编号: ').strip()
 73         # 判断输入是否正常
 74         if not choice.isdigit():
 75             print('输入有误,请输入数字')
 76             continue
 77         choice = int(choice)
 78         if choice not in range(len(school_list_msg)):
 79             print('请输入正确的编号!')
 80             continue
 81         # 获取输入学校名称
 82         school_name = school_list_msg[choice]
 83         course_name = input('请输入要创建的课程: ').strip()
 84         # 调用创建课程接口,将获取的学校、以及要创建的课程、操作用户名传入
 85         flag,msg = admin_interface.create_course_interface(school_name,course_name,user_info.get('username'))
 86         if flag:
 87             print(msg)
 88             break
 89         else:
 90             print(msg)
 91 
 92 # 创建老师
 93 @common.login_auth('admin')
 94 def create_teacher():
 95     while 1:
 96         teacher_name = input('请输入要创建的老师: ').strip()
 97         # 调用创建老师接口
 98         flag,msg = admin_interface.create_teacher_interface(teacher_name,user_info['username'])
 99         if flag:
100             print(msg)
101             break
102         else:
103             print(msg)
104 
105 
106 func_dic = {
107     '1': register,
108     '2': login,
109     '3': create_school,
110     '4': create_course,
111     '5': create_teacher,
112 }
113 
114 
115 def admin_view():
116     while 1:
117         print('''
118         - 1、注册
119         - 2、登录
120         - 3、创新学校
121         - 4、创建课程
122         - 5、创建讲师
123         ''')
124         choice = input("请输入要操作的编号: ").strip()
125         if choice.lower() == 'q':
126             break
127         if not choice.isdigit():
128             print('输入有误,请输入正确的编号!或者"q"结束当前操作!')
129             continue
130         if choice not in func_dic:
131             print('操作的编号不存在!请从新输入!或者"q"结束当前操作!')
132             continue
133         func_dic.get(choice)()
View Code

core/student.py

  1 from interface import student_interface
  2 from interface import common_interface
  3 from lib import common
  4 
  5 user_info = {'username': None,'course':None}
  6 
  7 
  8 
  9 def register():
 10     while 1:
 11         user_name = input('请输入要注册学生的姓名:').strip()
 12         password = input('请输入要注册的密码:').strip()
 13         re_password = input('请再次输入要注册的密码:').strip()
 14         if password == re_password:
 15             flag,msg = student_interface.register_interface(user_name,password)
 16             if flag:
 17                 print(msg)
 18                 break
 19             else:
 20                 print(msg)
 21 
 22 def login():
 23     while 1:
 24         user_name = input('请输入要登录的学生名: ').strip()
 25         password = input('请输入登录学生的密码: ').strip()
 26         flag,msg = common_interface.login_interface(user_name,password,user_type='student')
 27         if flag:
 28             print(msg)
 29             user_info['username'] = user_name
 30             break
 31         else:
 32             print(msg)
 33 
 34 @common.login_auth('student')
 35 def choice_school():
 36     while 1:
 37         flag, school_list_msg = common_interface.get_all_school_interface()
 38         if not flag:
 39             print(school_list_msg)
 40             break
 41         for index,school_name in enumerate(school_list_msg):
 42             print('编号:【%s】  学校名:【%s】'%(index,school_name))
 43         choice = input('请输入学校编号: ').strip()
 44         if not choice.isdigit():
 45             print('输入有误,请输入数字')
 46             continue
 47         choice = int(choice)
 48         if choice not in range(len(school_list_msg)):
 49             print('请输入正确的编号!')
 50             continue
 51         school_name = school_list_msg[choice]
 52         # print('你选择的是 %s 校区'% school_name)
 53         # print(user_info['username'])
 54         flag,msg = student_interface.choice_school_interface(school_name,user_info['username'])
 55         if flag:
 56             print(msg)
 57             user_info['course'] = school_name
 58             break
 59         else:
 60             print(msg)
 61             break
 62 
 63 @common.login_auth('student')
 64 def choice_course():
 65     while 1:
 66         '''
 67                 # # 选择校区
 68         # flag, school_list_msg = common_interface.get_all_school_interface()
 69         # if not flag:
 70         #     print(school_list_msg)
 71         #     break
 72         # for index,school_name in enumerate(school_list_msg):
 73         #     print('编号:【%s】  学校名:【%s】'%(index,school_name))
 74         # choice = input('请输入学校编号: ').strip()
 75         # if not choice.isdigit():
 76         #     print('输入有误,请输入数字')
 77         #     continue
 78         # choice = int(choice)
 79         # if choice not in range(len(school_list_msg)):
 80         #     print('请输入正确的编号!')
 81         #     continue
 82         # school_name = school_list_msg[choice]
 83         # 选择课程
 84         flag,course_list_msg = common_interface.get_all_course_interface()
 85         if not flag:
 86             print(course_list_msg)
 87             break
 88         for index,course_name in enumerate(course_list_msg):
 89             print('编号:【%s】  课程名:【%s】'%(index,course_name))
 90         choice = input('请输入课程编号: ').strip()
 91         if not choice.isdigit():
 92             print('输入有误,请输入数字')
 93             continue
 94         choice = int(choice)
 95         if choice not in range(len(course_list_msg)):
 96             print('请输入正确的编号!')
 97             continue
 98         course_name = course_list_msg[choice]
 99 
100         flag,msg = student_interface.choice_course_interface(course_name,user_info['username'])
101         if flag:
102             print(msg)
103             break
104         else:
105             print(msg)
106         '''
107         # 获取当前学生的所在学校的课程列表
108         flag,course_list_msg = student_interface.get_course_list_interface(user_info.get('username'))
109         if not flag:
110             print(course_list_msg)
111             break
112         # 打印课程列表,并让用户选择课程
113         for index,course_name in enumerate(course_list_msg):
114             print('编号:【%s】  课程名:【%s】'%(index,course_name))
115         choice = input('请输入课程编号: ').strip()
116         if not choice.isdigit():
117             print('输入有误,请输入数字')
118             continue
119         choice = int(choice)
120         if choice not in range(len(course_list_msg)):
121             print('请输入正确的编号!')
122             continue
123         course_name = course_list_msg[choice]
124         # 调用学生选择课程接口
125         flag,msg = student_interface.choice_course_interface(course_name,user_info['username'])
126         if flag:
127             print(msg)
128             break
129         else:
130             print(msg)
131             break
132 
133 @common.login_auth('student')
134 def check_score():
135     score_dict = student_interface.check_score_interface(user_info.get('username'))
136     if not score_dict:
137         print('没有选择课程!')
138     print(score_dict)
139 
140 func_dic = {
141     '1': register,
142     '2': login,
143     '3': choice_school,
144     '4': choice_course,
145     '5': check_score,
146 }
147 
148 
149 def student_view():
150     while 1:
151         print('''
152         - 1、注册
153         - 2、登录
154         - 3、选择校区
155         - 4、选择课程
156         - 5、查看分数
157         ''')
158         choice = input("请输入要操作的编号: ").strip()
159         if choice.lower() == 'q':
160             break
161         if not choice.isdigit():
162             print('输入有误,请输入正确的编号!或者"q"结束当前操作!')
163             continue
164         if choice not in func_dic:
165             print('操作的编号不存在!请从新输入!或者"q"结束当前操作!')
166             continue
167         func_dic.get(choice)()
View Code

core/teacher.py

  1 from interface import teacher_interface
  2 from interface import common_interface
  3 from  lib import common
  4 
  5 user_info = {'username': None}
  6 
  7 def login():
  8     while 1:
  9         username = input('请输入要登录的账户: ').strip()
 10         password = input('请输入登录密码: ').strip()
 11         flag,msg = common_interface.login_interface(username,password,user_type='teacher')
 12         if flag:
 13             print(msg)
 14             user_info['username'] = username
 15             break
 16         else:
 17             print(msg)
 18 
 19 @common.login_auth('teacher')
 20 def check_course():
 21     flag,course_list = teacher_interface.check_course_interface(user_info.get('username'))
 22     if flag:
 23         print(course_list)
 24     else:
 25         print(course_list)
 26 
 27 @common.login_auth('teacher')
 28 def choose_course():
 29     while 1:
 30         # 1、打印所有学校,并选择选择
 31         flag,school_list = common_interface.get_all_school_interface()
 32         if not flag:
 33             print(school_list)
 34             break
 35         for index,school_name in enumerate(school_list):
 36             print('编号:%s        学校名:%s'%(index,school_name))
 37         # 老师输入学校编号
 38         choice = input('请输入选择的学校编号: ').strip()
 39         if not choice.isdigit():
 40             print('输入有误!')
 41             continue
 42         choice = int(choice)
 43         if choice not in range(len(school_list)):
 44             print('输入的编号有误!')
 45             continue
 46         school_name = school_list[choice]
 47         # 2、从选择的学校中获取所有课程
 48         flag2,course_list = common_interface.get_all_course_interface(school_name)
 49         if not flag2:
 50             print(course_list)
 51             break
 52         for index,course_name in enumerate(course_list):
 53             print('编号:%s        课程名:%s'%(index,course_name))
 54         # 老师输入学校编号
 55         choice2 = input('请输入选择的学校编号: ').strip()
 56         if not choice2.isdigit():
 57             print('输入有误!')
 58             continue
 59         choice2 = int(choice2)
 60         if choice2 not in range(len(course_list)):
 61             print('输入的编号有误!')
 62             continue
 63         course_name = course_list[choice2]
 64         # 3、将课程添加到老师课程中
 65         flag3 ,msg = teacher_interface.add_course_interface(course_name,user_info.get('username'))
 66         if flag3:
 67             print(msg)
 68             break
 69         else:
 70             print(msg)
 71 
 72 # 查看课程下学生
 73 @common.login_auth('teacher')
 74 def check_stu_from_course():
 75     while 1:
 76         # 先获取老师所有的课程
 77         flag, course_list = teacher_interface.check_course_interface(user_info.get('username'))
 78         if not flag:
 79             print(course_list)
 80             break
 81         for index, course_name in enumerate(course_list):
 82             print('编号:%s        课程名:%s' % (index, course_name))
 83         # 老师输入学校编号
 84         choice = input('请输入选择的学校编号: ').strip()
 85         if not choice.isdigit():
 86             print('输入有误!')
 87             continue
 88         choice = int(choice)
 89         if choice not in range(len(course_list)):
 90             print('输入的编号有误!')
 91             continue
 92         course_name = course_list[choice]
 93         # 获取课程列表下的学生
 94         flag2,student_list = teacher_interface.get_all_stu_interface(course_name , user_info.get('username'))
 95         if flag2:
 96             print(student_list)
 97             break
 98         else:
 99             print(student_list)
100             break
101 
102 #
103 @common.login_auth('teacher')
104 def change_score_from_student():
105     while 1:
106         # 先获取老师所有的课程
107         flag, course_list = teacher_interface.check_course_interface(user_info.get('username'))
108         if not flag:
109             print(course_list)
110             break
111         for index, course_name in enumerate(course_list):
112             print('编号:%s        课程名:%s' % (index, course_name))
113         # 老师输入学校编号
114         choice = input('请输入选择的学校编号: ').strip()
115         if not choice.isdigit():
116             print('输入有误!')
117             continue
118         choice = int(choice)
119         if choice not in range(len(course_list)):
120             print('输入的编号有误!')
121             continue
122         course_name = course_list[choice]
123         # 获取课程列表下的学生
124         flag2,student_list = teacher_interface.get_all_stu_interface(course_name , user_info.get('username'))
125         if not flag2:
126             print(student_list)
127             break
128         for index2,student_name in enumerate(student_list):
129             print('编号:%s        学生名:%s' % (index2, student_name))
130         choice2 = input('请输入选择的学生编号: ').strip()
131         if not choice2.isdigit():
132             print('输入有误!')
133             continue
134         choice2 = int(choice2)
135         if choice2 not in range(len(student_list)):
136             print('输入的编号有误!')
137             continue
138         student_name = student_list[choice2]
139         score = input('请输入要修改的成绩: ').strip()
140         if not score.isdigit():
141             continue
142         score = int(score)
143         flag3,msg = teacher_interface.change_score_interface(course_name,student_name,score,user_info.get('username'))
144         if flag3:
145             print(msg)
146             break
147 
148 
149 func_dic = {
150     '1': login,
151     '2': check_course,
152     '3': choose_course,
153     '4': check_stu_from_course,
154     '5': change_score_from_student,
155 }
156 
157 
158 def teacher_view():
159     while 1:
160         print('''
161         - 1、登录
162         - 2、查看教授课程
163         - 3、选择教授课程
164         - 4、查看课程下学生
165         - 5、修改学生分数
166         ''')
167         choice = input("请输入要操作的编号: ").strip()
168         if choice.lower() == 'q':
169             break
170         if not choice.isdigit():
171             print('输入有误,请输入正确的编号!或者"q"结束当前操作!')
172             continue
173         if choice not in func_dic:
174             print('操作的编号不存在!请从新输入!或者"q"结束当前操作!')
175             continue
176         func_dic.get(choice)()
View Code

conf/settings.py

1 import os
2 
3 BASE_PATH = os.path.dirname(
4     os.path.dirname(__file__)
5 )
6 
7 DB_PATH = os.path.join(
8     BASE_PATH,'db'
9 )
View Code

interface/admin_interface.py

 1 from db import modles
 2 from lib import common
 3 
 4 # 注册接口
 5 def register_interface(username,password):
 6     # 判断用户名是否存在
 7     admin_obj = modles.Admin.select(username)
 8     if admin_obj:
 9         return False,'用户已存在!'
10     # 密码加密+加盐
11     password = common.get_password_md5(password)
12     print(password)
13     # 用户不存在则创建用户
14     admin_obj = modles.Admin(username,password)
15     admin_obj.save()
16     return True,'注册成功!'
17 
18 # 创建学校接口
19 def create_school_interface(school_name,school_addr,admin_user):
20     # 获取学校,并查看学校是否存在
21     school_obj = modles.School.select(school_name)
22     if school_obj:
23         return False,'学校存在!'
24     # 获取用户是否登录
25     admin_obj = modles.Admin.select(admin_user)
26     # 调用创建学校类方法
27     admin_obj.create_school(school_name,school_addr)
28     return True,'【%s】 学校创建成功!'%school_name
29 
30 # 创建课程接口
31 def create_course_interface(school_name,course_name,admin_user):
32     # 判断学校是否存在
33     school_obj = modles.School.select(school_name)
34     # 判断课程是否在学校列表中
35     if course_name in school_obj.course_list:
36         return False, '课程存在!'
37     # 获取当前用户是否存在
38     admin_obj = modles.Admin.select(admin_user)
39     admin_obj.create_course(school_obj,course_name)
40     return True,'【%s】课程创建成功!'%course_name
41 
42 # 创建老师接口
43 def create_teacher_interface(teacher_name,admin_user,pwd = '123'):
44     # 查看教师是否存在
45     teacher_obj = modles.Teacher.select(teacher_name)
46     if teacher_obj:
47         return False,'教师已存在!'
48     pwd = common.get_password_md5(pwd)
49     admin_obj = modles.Admin.select(admin_user)
50     admin_obj.create_teacher(teacher_name,pwd)
51     return True,'【%s】老师创建成功!'%teacher_name
View Code

interface/student_interface.py

 1 from db import modles
 2 from lib import common
 3 
 4 
 5 def register_interface(user_name,password):
 6     stu_obj = modles.Student.select(user_name)
 7     if stu_obj:
 8         return False,'注册用户已存在!'
 9     password = common.get_password_md5(password)
10     stu_obj = modles.Student(user_name,password)
11     stu_obj.save()
12     return True,'注册成功!'
13 
14 
15 # 选择校区
16 def choice_school_interface(school_name,user_name):
17     # 判断该学生是否已在这个校区
18     student_obj = modles.Student.select(user_name)
19 
20     if student_obj.school_name:
21         return False,'该学生已经选择校区!'
22     # 如果不存在,则保存
23     # 查看学生实例
24     student_obj.choice_school(school_name)
25     return True, '选择 %s 校区完成!' % school_name
26 
27 # 获取学生所在学校所有课程
28 def get_course_list_interface(user_name):
29     stu_obj = modles.Student.select(user_name)
30     if not stu_obj.school_name:
31         return False,'当前学生还没有选择学校!'
32     # 开始获取学校对象
33     school_obj = modles.School.select(stu_obj.school_name)
34     # 判断当前学校是否有课程
35     if not school_obj.course_list:
36         return False,'没有课程,先联系管理员!'
37     return True, school_obj.course_list
38 
39 # 选择课程接口
40 def choice_course_interface(course_name,user_name):
41     # 判断该学生是否存在已选择课程
42     stu_obj = modles.Student.select(user_name)
43     # 判断课程是否已经存在
44     if course_name in stu_obj.course_list:
45         return False,'该学生已经选择了这个课程'
46     # 调用学生对象中添加课程的方法
47     stu_obj.add_course(course_name)
48     return True, '选择 %s 课程完成!' % course_name
49 
50 # 查看分数接口
51 def check_score_interface(user_name):
52     student_obj = modles.Student.select(user_name)
53     if student_obj.score_dict:
54         return student_obj.score_dict
View Code

interface/teacher_interface.py

 1 from db import modles
 2 from lib import common
 3 
 4 # def teacher_login_interface(username,password):
 5 #     teacher_obj = modles.Teacher.select(username)
 6 #     # print(teacher_obj.__dict__)
 7 #     if not teacher_obj:
 8 #         return False, '用户不存在!'
 9 #     password = common.get_password_md5(password)
10 #     if password == teacher_obj.pwd:
11 #         return True, '登录成功!'
12 #     else:
13 #         return False, '密码错误!'
14 
15 def check_course_interface(username):
16     # 获取老师的对象
17     teacher_obj = modles.Teacher.select(username)
18     # 将老师可的课程列表读取
19     # course_list = teacher_obj.course_list_tea
20     course_list = teacher_obj.show_course()
21     # 判断老师课程是否存在
22     if not course_list:
23         return False,'当前老师还是没有选择课程!'
24     return True,course_list
25 
26 def add_course_interface(course_name,username):
27     # 获取老师对象
28     teacher_obj = modles.Teacher.select(username)
29     # 判断当前课程是否在老师列表
30     course_list = teacher_obj.course_list_tea
31     if course_name in course_list:
32         return  False,'该课程已存在!'
33     # 若不存在,则添加该课程到老师的课程列表中
34     teacher_obj.add_course(course_name)
35     return True,'添加课程成功!'
36 
37 def get_all_stu_interface(course_name , username):
38     # 获取当前老师对象
39     teacher_obj = modles.Teacher.select(username)
40     # 让老师对象调用获取课程下所有学生功能
41     student_list = teacher_obj.get_student(course_name)
42     if not student_list:
43         return False,'学生没有选择该课程!'
44     return True,student_list
45 
46 def change_score_interface(course_name,student_name,score,username):
47     teacher_obj = modles.Teacher.select(username)
48     teacher_obj.change_score(course_name,student_name,score)
49     return True,'修改成功'
View Code

interface/common_interface.py

 1 import os
 2 from conf import settings
 3 from core import student
 4 from db import modles
 5 from lib import common
 6 
 7 # 获取学校信息
 8 def get_all_school_interface():
 9     # 获取学校文件夹的路径
10     school_dir = os.path.join(
11         settings.DB_PATH,'School'
12     )
13     # 判断文件是否存在
14     if not os.path.exists(school_dir):
15         return False,'没有学校,请先联系管理员!'
16     # 若文件夹存在,则获取文件夹中所有的文件的名字
17     school_list = os.listdir(school_dir)
18     return True,school_list
19 
20 # 获取课程信息
21 def get_all_course_interface(school_name):
22     school_obj = modles.School.select(school_name)
23     course_list = school_obj.course_list
24     if not course_list:
25         return False,'当前没有课程!'
26     return True,course_list
27 
28 
29 # 公共登录接口
30 def login_interface(username,password,user_type):
31     # 判断传入用户名
32     if user_type == 'admin':
33         # 判断用户是否存在
34         obj = modles.Admin.select(username)
35     elif user_type == 'student':
36         # 判断用户是否存在
37         obj = modles.Student.select(username)
38     elif user_type == 'teacher':
39         # 判断用户是否存在
40         obj = modles.Teacher.select(username)
41     else:
42         return False,'登录角色不对,请重新输入!'
43     if not obj:
44         return False,'用户不存在!'
45     # 密码加密
46     password = common.get_password_md5(password)
47     # print(password)
48     # print('====',admin_obj.pwd)
49     # 判断密码是否相同
50     if password == obj.pwd:
51         return True, '登录成功!'
52     else:
53         return False, '密码错误!请重新输入!'
View Code

db/db_handler.py

 1 import os
 2 import pickle
 3 from conf import settings
 4 
 5 def select_data(cls,username):
 6     # 获取类名字
 7     class_name = cls.__name__
 8     # 拼接文件名
 9     user_dir_path = os.path.join(
10         settings.DB_PATH,class_name
11     )
12     # 判断文件夹是否存在
13     if not os.path.exists(user_dir_path):
14         os.mkdir(user_dir_path)
15     # 判断用户是否存在(拼接用户路径)
16     user_path = os.path.join(
17         user_dir_path,username
18     )
19     if os.path.exists(user_path):
20         with open(user_path,'rb') as f:
21             obj = pickle.load(f)
22             return obj
23 
24 
25 
26 def save_data(obj):
27     # 获取类名
28     class_name = obj.__class__.__name__
29     # 拼接文件路径
30     user_dir_path = os.path.join(
31         settings.DB_PATH,class_name
32     )
33     # 判断文件夹是否存在
34     if not os.path.exists(user_dir_path):
35         os.mkdir(user_dir_path)
36     # 拼接用户文件路径
37     user_path = os.path.join(
38         user_dir_path,obj.user
39     )
40     with open(user_path,'wb') as f:
41         pickle.dump(obj,f)
View Code

db/modles.py

 1 from db import db_handler
 2 
 3 
 4 class Bsse:
 5     @classmethod
 6     def select(cls ,username):
 7         obj = db_handler.select_data(cls, username)
 8         return obj
 9 
10     def save(self):
11         db_handler.save_data(self)
12 
13 class Admin(Bsse):
14     def __init__(self,username,password):
15         self.user = username
16         self.pwd = password
17 
18     def create_school(self,school_name,school_addr):
19         school_obj = School(school_name,school_addr)
20         school_obj.save()
21 
22     def create_course(self,school_obj,course_name):
23         # 调用课程类,实例化创建课程
24         course_obj = Course(course_name)
25         course_obj.save()
26         # 获取当前学校对象,并将课程添加到课程列表
27         school_obj.course_list.append(course_name)
28         school_obj.save()
29 
30     def create_teacher(self,teacher_name,pwd):
31         teacher_obj = Teacher(teacher_name,pwd)
32         teacher_obj.save()
33 
34 
35 class Student(Bsse):
36     def __init__(self,username,password):
37         self.user = username
38         self.pwd = password
39         self.school_name = None
40         self.course_list = []
41         self.score_dict = {}
42 
43     def choice_school(self,school_name):
44         self.school_name = school_name
45         self.save()
46     # 学生添加课程方法
47     def add_course(self,course_name):
48         self.course_list.append(course_name)
49         self.score_dict[course_name] = 0
50         self.save()
51         # 学生选择的课程对象添加学生
52         cou_obj = Course.select(course_name)
53         cou_obj.stu_list.append(self.user)
54         cou_obj.save()
55 
56 
57 class School(Bsse):
58     def __init__(self,name,addr):
59         self.user = name
60         self.addr = addr
61         self.course_list = []
62 
63 
64 class Teacher(Bsse):
65     def __init__(self,username,pwd):
66         self.user = username
67         self.pwd = pwd
68         self.course_list_tea = []
69 
70     def show_course(self):
71         return self.course_list_tea
72 
73     def add_course(self,course_name):
74         self.course_list_tea.append(course_name)
75         self.save()
76 
77     def get_student(self,course_name):
78         course_obj = Course.select(course_name)
79         return course_obj.stu_list
80 
81     def change_score(self,course_name,student_name,score):
82         student_obj = Student.select(student_name)
83         student_obj.score_dict[course_name] = score
84         student_obj.save()
85 
86 class Course(Bsse):
87     def __init__(self,name):
88         self.user = name
89         self.stu_list = []
View Code

lib/common.py

 1 import hashlib
 2 
 3 # 密码加密加盐
 4 def get_password_md5(pwd):
 5     md5_obj = hashlib.md5()
 6     md5_obj.update(pwd.encode('utf-8'))
 7     salt = 'King'
 8     md5_obj.update(salt.encode('utf-8'))
 9     return md5_obj.hexdigest()
10 
11 # 认证登录装饰器
12 '''
13 装饰器框架:
14 def fun_auth(func):
15     def wrapper(*args,**kwargs):
16         res = func(*args,**kwargs)
17         return res
18     return wrapper
19 '''
20 
21 def login_auth(role):
22     from core import admin,student,teacher
23     def fun_auth(func):
24         def wrapper(*args,**kwargs):
25             if role == 'admin':
26                 if admin.user_info['username']:
27                     res = func(*args,**kwargs)
28                     return res
29                 else:
30                     admin.login()
31             elif role == 'student':
32                 if student.user_info['username']:
33                     res = func(*args, **kwargs)
34                     return res
35                 else:
36                     student.login()
37             elif role == 'teacher':
38                 if teacher.user_info['username']:
39                     res = func(*args, **kwargs)
40                     return res
41                 else:
42                     teacher.login()
43             else:
44                 print('当前视图不存在!')
45         return wrapper
46     return fun_auth
47 
48 
49 # 校区装饰器装饰器
50 #
51 # from core import student
52 # def fun_auth(func):
53 #     def wrapper(*args,**kwargs):
54 #             if student.user_info['username']:
55 #                 res = func(*args,**kwargs)
56 #                 return res
57 #             else:
58 #                 student.choice_school()
59 #     return wrapper
View Code

注:代码有不懂可以在底部留言,一起学习,一起进步,谢谢关注!

原文地址:https://www.cnblogs.com/Tang-Yuan/p/13716882.html