def login(self, st): msg_dict = eval(st) # 获取从报头中解析出来的信息 user_info = self.get_file() # 从数据库中获取用户信息 send_dict = {} if msg_dict['count'] < 3: if msg_dict['user_id'] in user_info.sections(): password = user_info[msg_dict['user_id']]['password'] if msg_dict['user_password'] == password: for k, v in user_info[msg_dict['user_id']].items(): send_dict[k] = v send_dict['user_id'] = msg_dict['user_id'] self.conn.send(str(send_dict).encode( setting.CODING)) # 账号密码正确向客户端发送用户信息 log_msg = 'account:%s operation:login info:login successfully' % msg_dict[ 'user_id'] loggers = Logger.logs('landing') loggers.info(log_msg) # 记录日志 else: self.conn.send(str(send_dict).encode(setting.CODING)) else: # 用户密码输出超过三次账号冻结 user_info[msg_dict['user_id']]['state'] = '1' user_info.write( open(r'%s\db\user_info.ini' % self.path, 'w', encoding=setting.CODING)) # 密码输出3次以上账号冻结 log_msg = 'account:%s operation:login info:account lockout' % msg_dict[ 'user_id'] loggers = Logger.logs('landing') loggers.info(log_msg) # 记录日志
def add_user(self, msg_dict): user_info = self.get_file() user_id = msg_dict['user_name'] if user_id not in user_info.sections() and len(user_id) != 0: user_info.add_section(msg_dict['user_name']) user_info[user_id]['state'] = '0' user_info[user_id]['password'] = msg_dict['user_password'] os.makedirs(str(setting.Home_Dir(user_id))) # 生成个人家目录 os.makedirs(r'%s\share' % str(setting.Home_Dir(user_id))) # 生成上传文件夹 # 注册后个人存储空间为1G user_info[user_id]['memory'] = '1G' user_info[user_id]['use_space'] = '0' user_info[user_id]['balance'] = '0' user_info.write( open(r'%s\db\user_info.ini' % self.path, 'w', encoding=setting.CODING)) self.send_respond(state_code=200) log_msg = 'account:%s operation:add_user info:login successfully' % user_id loggers = Logger.logs('landing') loggers.info(log_msg) # 记录日志 else: self.send_respond(state_code=201)
def replacement(cls): ''' 重置账号状态 :return: ''' role_list = [['老师账户重置', 'teacher'], ['学生账户重置', 'student']] while True: for index, i in enumerate(role_list): print(index, i[0]) choice = input('输出操作序号(b退出)>>:').strip() if choice == 'b': return if choice.isdigit(): choice = int(choice) else: print('请输入正确的序号!') return if len(role_list) >= choice: account = input('请输入要重置的账号>>:').strip() account_list = cls.get_data(role_list[choice][1], role_list[choice][1]) else: print('请输入正确的序号!') return if account in account_list: cls.reset(role_list[choice][1], account) log_msg = 'role:admin account:admin operation:reset info:%s:%s账户重置成功!' %\ (role_list[choice][1], account) loggers = Logger.logs('manager') loggers.info(log_msg)
def make_teacher(cls): ''' 添加老师账户 :return: ''' new_teacher = cls.creat_teacher() # 创建老师对象 choice_school = cls.select_school() # 选择学校 choice_course = cls.select_course('course', choice_school) # 选择课程 new_teacher.structure['school'] = choice_school new_teacher.structure['teacher_course'] = choice_course new_teacher.structure['teacher_id'] = cls.creat_id( 'teacher', choice_school, new_teacher.structure['teacher_class']) # 生成老师ID teacher_list = cls.get_data('teacher', 'teacher') teacher_list[ new_teacher.structure['teacher_id']] = new_teacher.teacher_name cls.save_file('teacher', 'teacher', teacher_list) cls.save_file('teacher', new_teacher.structure['teacher_id'], new_teacher.structure) # 报存老师信息 massage_course = cls.get_data('course', choice_course) massage_course['course_teacher'].append( new_teacher.structure['teacher_id']) print(massage_course) cls.save_file('course', choice_course, massage_course) # 同步教师信息给课程 massage_school = cls.get_data('school', choice_school) massage_school['teacher_id'].append( new_teacher.structure['teacher_id']) cls.save_file('school', choice_school, massage_school) # 同步老师信息到学校 log_msg = 'role:admin account:admin operation:creat teacher info:%s账户创建成功' \ % new_teacher.structure['teacher_id'] loggers = Logger.logs('manager') loggers.info(log_msg)
def dilatation(self, msg_dict): user_info = self.get_file() user_id = msg_dict['user_id'] if int(user_info[user_id]['balance']) >= msg_dict['need_money']: new_memory = int(user_info[user_id]['memory'].split('G')[0]) + int( msg_dict['buy_memory']) balance = int( user_info[user_id]['balance']) - msg_dict['need_money'] user_info[user_id]['balance'] = str(balance) user_info[user_id]['memory'] = str(new_memory) + 'GB' user_info.write( open(r'%s\db\user_info.ini' % self.path, 'w', encoding=setting.CODING)) send_msg = { 'new_memory': str(new_memory) + 'GB', 'new_balance': balance } self.send_respond(state_code=302, **send_msg) # 充值成功返回客户端状态信息 log_msg = 'account:%s operation:dilatation buy_spacey:%s info:dilatation successfully' % \ (user_id, str(msg_dict['buy_memory']) + 'G') loggers = Logger.logs('transaction') loggers.info(log_msg) # 记录日志 else: send_msg = { 'new_memory': user_info[user_id]['memory'], 'new_balance': user_info[user_id]['balance'] } self.send_respond(state_code=301, **send_msg)
def change_course(cls): ''' 更新课程信息 :return: ''' course = cls.update_course('course') log_msg = 'role:admin account:admin operation:update course info:%s课程更新成功!' % course loggers = Logger.logs('manager') loggers.info(log_msg)
def make_course(cls): ''' 添加新课程 :return: ''' new_course = cls.creat_course() log_msg = 'role:admin account:admin operation:creat course info:%s课程创建成功' \ % new_course.course_name loggers = Logger.logs('manager') loggers.info(log_msg)
def landing(role): ''' 老师和学生认证装饰器 :param func: :return: ''' n = 0 while True: account = input('输入账号>>:').strip() file_path = Module.check_file(role, account) if file_path: # 账号校验 massage = Module.get_data(role, account) else: print('用户未注册!') continue if massage['state'] == 0: # 检查用户状态 r_password = input('输入密码>>:').strip() password = Module.encrypt(r_password) else: print('账号被冻结,请联系管理员解除锁定!') exit() # 账号冻结退出程序 if password == massage['password']: # 密码校验 print('登录成功!') landing_log = 'role:%s account:%s operation:landing info:登录成功!' % ( role, account) loggers = Logger.logs(role) loggers.info(landing_log) return account else: print('密码错误,请重新输入!') n += 1 if n >= 3: print('密码输入错误次数过多,账号被冻结!') massage['state'] = 1 Module.save_file(role, account, massage) landing_error = 'role:%s account:%s operation:landing info:账号被冻结!' % ( role, account) loggers = Logger.logs(role) loggers.error(landing_error) return
def change_pwd(self, msg_dict): user_info = self.get_file() # 从数据库中获取用户信息 user_id = msg_dict['user_id'] if user_info[user_id]['password'] == msg_dict['old_pwd']: user_info[user_id]['password'] = msg_dict['new_pwd'] user_info.write( open(r'%s\db\user_info.ini' % self.path, 'w', encoding=setting.CODING)) log_msg = 'account:%s operation:change password info:change password successfully' % user_id loggers = Logger.logs('landing') loggers.info(log_msg) # 记录日志
def login(self, msg_dict): user_info = self.get_file() # 从数据库中获取用户信息 user_id = msg_dict['user_id'] send_msg = {} if msg_dict['user_id'] in user_info.sections(): if user_info[user_id]['state'] == '0': if msg_dict['count'] < 3: password = user_info[user_id]['password'] if msg_dict['user_password'] == password: self.home_dir = r'%s\home\%s' % ( self.path, msg_dict['user_id']) # 登录成功获取用户家目录 for k, v in user_info[user_id].items(): send_msg[k] = v send_msg['user_id'] = user_id self.send_respond(state_code=100, **send_msg) log_msg = 'account:%s operation:login info:login successfully' % msg_dict[ 'user_id'] loggers = Logger.logs('landing') loggers.info(log_msg) # 记录日志 else: self.send_respond(state_code=101) else: user_info[user_id]['state'] = '1' user_info.write( open(r'%s\db\user_info.ini' % self.path, 'w', encoding=setting.CODING)) # 密码输出3次以上账号冻结 self.send_respond(state_code=102) log_msg = 'account:%s operation:login info:account lockout' % msg_dict[ 'user_id'] loggers = Logger.logs('landing') loggers.info(log_msg) # 记录日志 else: self.send_respond(state_code=102) else: self.send_respond(state_code=101)
def chang_massage(role, account): ''' 更新个人信息 :param account: :return: ''' old_massage = Teacher_Function.get_data(role, account) Teacher_Function.update_teacher(role, account) new_massage = Teacher_Function.get_data(role, account) if str(old_massage) == str(new_massage): # 判断信息是否修改过 log_msg = 'role:teacher account:%s operation:update massage info:个人信息更新成功!' %\ (account) loggers = Logger.logs(role) loggers.info(log_msg) # 记录老师信息修改记录
def chang_massage(cls, role, account): ''' 更新个人信息 :param account: :return: ''' old_massage = cls.get_data(role, account) cls.update_student(role, account) new_massage = cls.get_data(role, account) if str(old_massage) == str(new_massage): # 判断信息是否修改过 log_msg = 'role:student account:%s operation:update massage info:个人信息更新成功!' % \ (account) loggers = Logger.logs(role) loggers.info(log_msg) # 记录学生信息修改记录
def make_school(cls): ''' 添加学校 :return: ''' new_school = cls.creat_school() # 创建学校对象 pick_course_id = cls.select_course('school', new_school.school_id) # 绑定课程到学校 for i in pick_course_id: # 经课程id添加到学校 new_school.structure['course_id'].append(i) cls.save_file('school', new_school.school_id, new_school.structure) # 保存学校信息 log_msg = 'role:admin account:admin operation:creat school info:%s创建成功!' % new_school.name loggers = Logger.logs('manager') loggers.info(log_msg)
def inner(): count = 0 while count < 3: account = input('请输入管理员账号(b退出程序)>>:').strip() if account == 'b': return password = input('请输入密码>>:').strip() if account == 'admin' and password == 'admin': print('登录成功!') log_massage = 'role:manager account:admin operation:landing info:管理员成功登录!' # 日志信息 loggers = Logger.logs('manager') # 记录日志 loggers.info(log_massage) return func() else: print('账号或密码错误!') count += 1 if count == 3: print('当日密码输入次数过多!') error = 'role:admin account:admin operation:landing info:密码输入次数过多!' loggers = Logger.logs('manager') # 记录错误日志 loggers.error(error)
def uploading(self, st): msg_dict = eval(st) user_info = self.get_file() user_id = msg_dict['user_id'] total_size = int(user_info[user_id]['memory'].split('G')[0]) total_v = total_size * 1024 * 1024 * 1024 file_name = msg_dict['file_path'].split('\\') send_msg = { 'flag': True, 'use_space': None, 'surplus_space': None, 'file_size': self.bytes(msg_dict['file_size']) } # 发送给客户端的状态信息 if int(user_info[user_id]['use_space']) + \ msg_dict['file_size'] <= total_v: # 判断文件大小是否超过内存 use_space = int( user_info[user_id]['use_space']) + msg_dict['file_size'] user_info[user_id]['use_space'] = str(use_space) user_info.write( open(r'%s\db\user_info.ini' % self.path, 'w', encoding=setting.CODING)) send_msg['use_space'] = self.bytes(use_space) uploading_path = r'%s\service\file_path\%s\share\%s' % ( setting.BASIS_DIR, user_id, file_name[-1]) self.conn.send(str(send_msg).encode(setting.CODING)) with open(uploading_path, 'wb') as f: print(uploading_path) recv_size = 0 while recv_size < msg_dict['file_size']: line = self.conn.recv(1024) f.write(line) recv_size += len(line) print('总大小:%s 已上传大小:%s' % (msg_dict['file_size'], recv_size)) log_msg = 'account:%s operation:uploading file_name:%s info:uploading successfully' % \ (user_id, file_name[-1]) loggers = Logger.logs('operation') loggers.info(log_msg) # 记录日志 else: surplus_space = total_v - int(user_info[user_id]['use_space']) send_msg['flag'] = False send_msg['surplus_space'] = self.bytes(surplus_space) self.conn.send(str(send_msg).encode(setting.CODING))
def make_student(cls): ''' 注册新账号 :return: ''' new_student = cls.create_student() # 创建新的学生对象 choice_school = cls.select_school() # 注册时选择学校 choice_course = cls.select_course('course', choice_school) # 注册时选择课程 choice_teacher = cls.select_teacher(choice_course, choice_school) # 注册时选择老师 choice_class = cls.select_class(choice_teacher) # 注册时选择班级 new_student.student_structure['school'] = choice_school new_student.student_structure['teacher'] = choice_teacher new_student.student_structure['class'] = choice_class new_student.student_structure['id'] = cls.creat_id( 'student', choice_school, choice_class) # 生成学号 # 选课后分数为0 new_student.student_structure['course'][choice_course] = 0 student_list = cls.get_data('student', 'student') student_list[new_student.student_structure['id']] = new_student.name cls.save_file('student', 'student', student_list) cls.save_file('student', new_student.student_structure['id'], new_student.student_structure) # 保存信息 print('注册成功!') print('您的序号为%s,请保管好号码,用以登陆!' % new_student.student_structure['id']) log_msg = 'role:%s account:%s operation:register info:注册成功!' %\ ('student', new_student.student_structure['id']) loggers = Logger.logs('student') # 报存注册日志 loggers.info(log_msg) massage_school = cls.get_data('school', choice_school) massage_school['student_id'].append( new_student.student_structure['id']) cls.save_file('school', choice_school, massage_school) # 同步学生信息给学校 massage_teacher = cls.get_data('teacher', choice_teacher) massage_teacher['student_id'].append( new_student.student_structure['id']) cls.save_file('teacher', choice_teacher, massage_teacher) # 同步学生信息给老师 massage_class = cls.get_data('classes', choice_class) massage_class['class_students'].append( new_student.student_structure['id']) cls.save_file('classes', choice_class, massage_class) # 同步学生信息给班级
def recharge(cls, role, account): ''' 余额充值 :param account: :return: ''' massage = cls.get_data(role, account) money = input('充值金额(b退出)>>:').strip() if money == 'b': return if money.isdigit(): money = int(money) massage['balance'] = int(massage['balance']) + money cls.save_file(role, account, massage) log_msg = 'role:student account:%s operation:recharge info:成功充值%s元!' %\ (account, money) loggers = Logger.logs(role) loggers.info(log_msg) # 记录充值信息
def recharge(self, st): msg_dict = eval(st) user_info = self.get_file() user_id = msg_dict['user_id'] user_info[user_id]['balance'] = str( int(user_info[user_id]['balance']) + msg_dict['money']) user_info.write( open(r'%s\db\user_info.ini' % self.path, 'w', encoding=setting.CODING)) new_info = self.get_file() back_msg = new_info[user_id]['balance'] self.conn.send(back_msg.encode(setting.CODING)) # 充值成功返回一个成功状态给客户端 log_msg = 'account:%s operation:recharge recharge_money:%s info:recharge successfully' % \ (user_id, msg_dict['money']) loggers = Logger.logs('transaction') loggers.info(log_msg) # 记录日志
def recharge(self, msg_dict): user_info = self.get_file() user_id = msg_dict['user_id'] send_msg = {} user_info[user_id]['balance'] = str( int(user_info[user_id]['balance']) + msg_dict['money']) user_info.write( open(r'%s\db\user_info.ini' % self.path, 'w', encoding=setting.CODING)) new_info = self.get_file() new_balance = new_info[user_id]['balance'] send_msg['balance'] = new_balance self.send_respond(state_code=300, **send_msg) # 充值成功返回一个成功状态给客户端 log_msg = 'account:%s operation:recharge recharge_money:%s info:recharge successfully' % \ (user_id, msg_dict['money']) loggers = Logger.logs('transaction') loggers.info(log_msg) # 记录日志
def download(self, msg_dict): user_id = msg_dict['user_id'] if os.path.exists(msg_dict['server_file_path']): header_dict = { 'state_code': 401, 'respond_msg': self.STATE_CODE[401], 'filename': msg_dict['server_file_path'], 'md5': 'xxxx', 'file_size': os.path.getsize(r'%s' % msg_dict['server_file_path']) } # 制作报头 header_json = json.dumps(header_dict) header_bytes = header_json.encode(setting.CODING) self.conn.send(struct.pack('i', len(header_bytes))) # 发送报头长度 self.conn.send(header_bytes) # 发送报头 with open(r'%s' % msg_dict['server_file_path'], 'rb') as f: # 发送下载文件内容 f.seek(int(msg_dict['recv_size'])) for line in f: self.conn.send(line) log_msg = 'account:%s operation:download file_name:%s info:download successfully' % \ (user_id, msg_dict['file_name']) loggers = Logger.logs('operation') loggers.info(log_msg) # 记录日志 else: header_dict = { 'state_code': 402, 'respond_msg': self.STATE_CODE[402], 'filename': msg_dict['server_file_path'], 'md5': 'xxxx', 'file_size': os.path.getsize(r'%s' % msg_dict['server_file_path']) } # 制作报头 header_json = json.dumps(header_dict) header_bytes = header_json.encode(setting.CODING) self.conn.send(struct.pack('i', len(header_bytes))) # 发送报头长度 self.conn.send(header_bytes) # 发送报头
def choice_course(cls, role, account): ''' 购买课程 :param account: :return: ''' massage = cls.get_data(role, account) course_id = cls.select_course(role, massage['school']) course_msg = cls.get_data('course', course_id) if int(massage['balance']) >= int(course_msg['perice']): massage['balance'] = int(massage['balance']) - int( course_msg['perice']) massage['course'][course_id] = None cls.save_file(role, account, massage) log_msg = 'role:student account:%s operation:choice course info:%s课程选课成功!' %\ (account, course_id) loggers = Logger.logs(role) loggers.info(log_msg) else: print('余额不足,请充值!')
def add_user(self, st): msg_dict = eval(st) user_info = self.get_file() user_id = msg_dict['user_name'] send_dict = {} if user_id not in user_info.sections() and len(user_id) != 0: user_info.add_section(msg_dict['user_name']) user_info[user_id]['state'] = '0' user_info[user_id]['password'] = msg_dict['user_password'] user_info[user_id]['home_dir'] = str(setting.Home_Dir(user_id)) os.makedirs(str(setting.Home_Dir(user_id))) # 生成个人家目录 os.makedirs(r'%s\share' % str(setting.Home_Dir(user_id))) # 生成上传文件夹 # 注册后个人存储空间为1G user_info[user_id]['memory'] = '1G' user_info[user_id]['use_space'] = '0' user_info[user_id]['balance'] = '0' user_info.write( open(r'%s\db\user_info.ini' % self.path, 'w', encoding=setting.CODING)) send_dict['user_id'] = user_id send_dict['state'] = '0' send_dict['password'] = msg_dict['user_password'] send_dict['home_dir'] = user_info[user_id]['home_dir'] send_dict['memory'] = '1G' send_dict['use_space'] = '0' send_dict['balance'] = '0' self.conn.send(str(send_dict).encode( setting.CODING)) # 用户注册信息返回给客户端 log_msg = 'account:%s operation:add_user info:registered successfully' % user_id loggers = Logger.logs('operation') loggers.info(log_msg) # 记录日志 else: self.conn.send(str(send_dict).encode(setting.CODING))
def schooltime(role, account): ''' 老师上课打卡 :param account: :return: ''' while True: teacher_msg = Teacher_Function.get_data(role, account) print(teacher_msg) for i in teacher_msg['teacher_class']: class_msg = Teacher_Function.born_class('classes', i) print(class_msg) class_id = input('请输入要上课班级的代号(b退出)>>:').strip() # 选择上课班级 if class_id in teacher_msg['teacher_class']: log_msg = 'role:teacher account:%s operation:schooltime info:已在%s班级上课!' %\ (account, class_id) loggers = Logger.logs(role) loggers.info(log_msg) # 记录老师上课记录 return else: print('请输入正确班级代码!')
def del_file(self, msg_dict): back_msg = {} users_info = self.get_file() del_path = msg_dict['file_path'] file_size = os.path.getsize(del_path) os.remove(r'{}'.format(del_path)) use_memory = self.space_calculate() users_info[msg_dict['user_id']]['use_space'] = use_memory users_info.write( open(r'%s\db\user_info.ini' % self.path, 'w', encoding=setting.CODING)) file_name = os.path.split(del_path)[1] back_msg['file_size'] = self.bytes(file_size) back_msg['file_name'] = file_name self.send_respond(state_code=402, **back_msg) log_msg = 'account:%s operation:del file file_name:%s info:del file successfully' % ( msg_dict['user_id'], file_name) loggers = Logger.logs('operation') loggers.info(log_msg) # 记录日志
def make_class(cls): ''' 添加班级 :return: ''' new_class = cls.creat_class() # 创建班级 choice_school = cls.select_school() # 给学校绑定班级 choice_course = cls.select_course('course', choice_school) # 给班级绑定课程 choice_teacher = cls.select_teacher(choice_course, choice_school) # 给班级绑定老师 new_class.structure['school'] = choice_school new_class.structure['class_course'] = choice_course new_class.structure['class_teacher'] = choice_teacher cls.save_file('classes', new_class.class_id, new_class.structure) # 保存班级信息 massage_teacher = cls.get_data('teacher', choice_teacher) massage_teacher['teacher_class'].append(new_class.class_id) cls.save_file('teacher', choice_teacher, massage_teacher) # 班级信息同步到老师 log_msg = 'role:admin account:admin operation:creat class info:%s创建成功' % new_class.class_name loggers = Logger.logs('manager') loggers.info(log_msg)
def download(self, st): msg_dict = eval(st) user_id = msg_dict['user_id'] header_dict = { 'filename': msg_dict['file_path'], 'md5': 'xxxx', 'file_size': os.path.getsize(r'%s' % msg_dict['file_path']) } # 制作报头 header_json = json.dumps(header_dict) header_bytes = header_json.encode(setting.CODING) self.conn.send(struct.pack('i', len(header_bytes))) # 发送报头长度 self.conn.send(header_bytes) # 发送报头 with open(r'%s' % msg_dict['file_path'], 'rb') as f: # 发送下载文件内容 for line in f: self.conn.send(line) file_list = msg_dict['file_path'].split('\\') log_msg = 'account:%s operation:download file_name:%s info:download successfully' % \ (user_id, file_list[-1]) loggers = Logger.logs('operation') loggers.info(log_msg) # 记录日志
def update_password(role, account): Teacher_Function.change_password(role, account) log_msg = 'role:teacher account:%s operation:change password info:密码修改成功!' % ( account) loggers = Logger.logs(role) loggers.info(log_msg)
def update_password(cls, role, account): cls.change_password(role, account) log_msg = 'role:student account:%s operation:change password info:密码修改成功!' % ( account) loggers = Logger.logs(role) loggers.info(log_msg)