예제 #1
0
 def __init__(self,
              school_name,
              city_name,
              teachers=None,
              courses=None,
              students=None,
              banjis=None):
     '''
     定义学校属性
     :param school_name: 学校名,字符类型
     :param city_name: 城市名,字符类型
     :param teachers: 讲师,字典类型,如{"teachers": []}
     :param students: 学员, 字典类型,如{"students": []}
     :param courses: 课程,字典类型,如{"courses": []}
     :param banjis: 班级,字典类型,如{"banjis": []}
     '''
     self.school_name = school_name
     self.city_name = city_name
     self.teachers = teachers
     self.courses = courses
     self.students = students
     self.banjis = banjis
     self.db = Db(settings.BASE_DATABASE)  # 数据库连接
     self.db_path = self.db.db_handler()
예제 #2
0
class BaseDb(object):
    '''基础数据库类'''

    db = Db(settings.BASE_DATABASE)  # 数据库连接
    db_path = "%s/base.db" % db.db_handler()

    def __init__(self):
        '''
        初始基础数据课程和学校
        '''
        if os.path.exists(BaseDb.db_path):  # 初始数据库存在时,不做任何操作
            return None

        # 创建课程3门,linux、python、go课程
        go = Course("go", 8000)
        linux = Course("linux", 10800)
        python = Course("python", 8800)

        # 创建学校2所,北京老男孩、上海老男孩
        beijing_oldboy_school = School("beijing_oldboy_school", "beijing",
                                       {"teachers": []},
                                       {"courses": [linux, python]},
                                       {"students": []}, {"banjis": []})
        shanghai_oldboy_school = School("shanghai_oldboy_school", "shanghai",
                                        {"teachers": []}, {"courses": [go]},
                                        {"students": []}, {"banjis": []})
        base_data = {
            "schools": [beijing_oldboy_school, shanghai_oldboy_school],
        }
        self.save_data(base_data)

        admin_username = "******"
        admin_password = "******"
        status = 1
        authority = 8
        admin = Admin(admin_username, admin_password, status, authority)
        admin.create()

    def save_data(self, base_data):
        '''保存基础数据库
        :param base_data: 基础数据
        :return
        '''
        BaseDb.db.dump_pickle_data(BaseDb.db_path, base_data)  # 写入数据库
        return True

    def get_data(self):
        base_data = BaseDb.db.load_pickle_data(BaseDb.db_path)
        # 从数据库读取学员信息
        schools = base_data["schools"]
        attr_students = "students"
        attr_teachers = "teachers"
        for school in schools:
            students = getattr(school, attr_students)[attr_students]
            teachers = getattr(school, attr_teachers)[attr_teachers]
            for student in students:
                account_id = student.account.account_id
                student.account = student.account.get_account_data(account_id)
                user_info_dict = student.account.user_info
                student.name = user_info_dict.get("name")
                student.sex = user_info_dict.get("sex")
                student.age = user_info_dict.get("age")
            for teacher in teachers:
                account_id = teacher.account.account_id
                teacher.account = teacher.account.get_account_data(account_id)
                user_info_dict = teacher.account.user_info
                teacher.name = user_info_dict.get("name")
                teacher.sex = user_info_dict.get("sex")
                teacher.age = user_info_dict.get("age")
        return base_data
예제 #3
0
 def __init__(self):
     General.__init__(self)
     self.conn = self.pool.connection()
     self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)
     self.db = Db(self.conn, self.cursor)
예제 #4
0
class Account(object):
    '''
    帐号类
    '''
    db = Db(settings.ACCOUNT_DATABASE)  # 数据库连接,公共属性
    db_path = db.db_handler()

    def __init__(self,
                 user_name,
                 password,
                 status=settings.STATUS['normal'],
                 authority=settings.AUTHORITY['student'],
                 user_info={}):
        '''
        定义帐号属性
        :param user_name: 用户名, 字符类型
        :param password: 密码, 字符类型
        :param status: 帐号状态和帐号权限,数字整型
        :param authority: 帐号权限, 数字整型
        :param user_info: 用户信息, 字典类型
        '''
        self.user_name = user_name
        self.password = password
        self.status = status  # 0为锁定用户,1为正常
        self.authority = authority  # 1为普通用户(学员),2为讲师,8为admin用户
        self.user_info = user_info  # 学员、讲师、学校信息

    def show_info(self):
        '''查看user_info属性'''
        print("account_id: \033[32;1m{}\033[0m".format(self.account_id))
        if self.user_info:
            for k in self.user_info:
                print("{}: \033[32;1m{}\033[0m".format(k, self.user_info[k]))

    def create(self):
        '''
        创建新帐号
        :return: 返回帐户实例(自己))
        '''
        # 获取自增长id
        begin_id = 10000
        auto_increment_file = "%s/increment_id" % os.path.dirname(
            Account.db_path)
        if os.path.exists(auto_increment_file):  # 自增长id文件存在时
            line = Account.db.load_pickle_data(auto_increment_file)
            auto_increment_id = int(line) + 1
        else:  # 自增长id文件不存在时
            id_list = []  # 帐户数据文件
            files_list = os.listdir(Account.db_path)
            for f in files_list:
                exist_flag = re.match(r'^(\d{5,})', f)
                if exist_flag:  # 有帐户存在时
                    id_list.append(f)

            if id_list:
                id_list.sort()
                max_id = int(id_list[-1])
                auto_increment_id = max_id + 1
            else:
                auto_increment_id = begin_id  # 帐户数据文件不存在

        self.account_id = auto_increment_id  # 帐户id
        check_flag = self.check_user_name(auto_increment_id)  # 检查用户名
        user_file = "%s/%s" % (Account.db_path, auto_increment_id)
        if not check_flag:  # 用户名不存在,才创建用户
            Account.db.dump_pickle_data(auto_increment_file,
                                        auto_increment_id)  # 保存自增加id
            Account.db.dump_pickle_data(user_file, self)  # 保存帐户数据
            return self
        else:
            print("User name [\033[31;1m%s\033[0m] has been registered!" %
                  self.user_name)
            return False

    def check_user_name(self, account_id):
        '''
        用account_id检查用户名是否存在于数据库
        :param user_name: 用户名,字符类型
        :return: 存在则为真,否则为假
        '''
        user_names = []  # 初始化用户名数据库
        exist_flag = False  # 初始化存在标记
        user_names_file = "%s/user_names" % Account.db_path
        if os.path.exists(user_names_file):
            user_names = Account.db.load_pickle_data(user_names_file)

            for u_n in user_names:
                if u_n["user_name"] == self.user_name:  # 存在
                    exist_flag = u_n["account_id"]
                    return exist_flag

        user_names.append({
            "account_id": account_id,
            "user_name": self.user_name
        })
        result = Account.db.dump_pickle_data(user_names_file, user_names)

        return exist_flag

    def get_account_id(self, user_name):
        '''
        用user_name查询出account_id
        :return:
        '''
        exist_flag = False  # 初始化存在标记
        user_names_file = "%s/user_names" % Account.db_path
        if os.path.exists(user_names_file):
            user_names = Account.db.load_pickle_data(user_names_file)  # 列表类型

            for u_n in user_names:
                if u_n["user_name"] == user_name:  # 存在
                    exist_flag = u_n["account_id"]
                    return exist_flag

        # print("User name [\033[31;1m%s\033[0m] does not exist!" % user_name)
        return exist_flag

    def get_account_data(self, account_id):
        '''获取帐户数据
        :param account_id: 帐户id
        '''
        exist_flag = False  # 初始化存在标记
        user_file = "%s/%s" % (Account.db_path, account_id)
        if os.path.exists(user_file):
            account = Account.db.load_pickle_data(user_file)

            account_data = {
                "account_id": account_id,
                "user_name": self.user_name,
                "password": self.password,
                "status": self.status,
                "authority": self.authority,
                "user_info": self.user_info
            }
            return account

        # print("Account [\033[31;1m%s\033[0m] does not exist!" % account_id)
        return exist_flag

    def save_data(self, account_id):
        '''保存数据至数据库
        :param account_id: 帐户id
        '''
        user_file = "%s/%s" % (Account.db_path, account_id)
        Account.db.dump_pickle_data(user_file, self)  # 保存帐户数据
        return True

    def login(self):
        '''登录
        因为用户输入的是用户名,需要转化成account_id来验证
        '''
        account_id = self.get_account_id(self.user_name)  # 获取account_id
        if account_id:
            account_data = self.get_account_data(account_id)
            user_file = "%s/%s" % (Account.db_path, account_id)
            if os.path.exists(user_file):
                account = Account.db.load_pickle_data(user_file)  # 获取用户帐户

                if account.password == self.password:  # 验证密码
                    if self.status == settings.STATUS['normal']:
                        return account  # 返回帐户实例
                    else:
                        print(
                            "Account locked,[\033[31;1m%s\033[0m] sign in failed!"
                            % self.user_name)
                else:
                    print(
                        "Password error,[\033[31;1m%s\033[0m] sign in failed!"
                        % self.user_name)
                    return False
            else:
                print("Account [\033[31;1m%s\033[0m] data exception!" %
                      account_id)
        else:
            print("User name [\033[31;1m%s\033[0m] does not exist!" %
                  self.user_name)
예제 #5
0
class Account(object):
    '''
    账号信息
    '''
    db = Db(settings.ACCOUNT_DATABASE)  # 数据库连接,公共属性
    db_path = db.db_handler()

    def __init__(self,
                 user_name,
                 password,
                 status=settings.STATUS['normal'],
                 authority=settings.AUTHORITY['student'],
                 user_info={}):
        '''
        定义账号属性
        :param user_name:   用户名,字符属性
        :param password:    密码,字符属性
        :param status:      账号状态,整数类型
        :param authority:   账号权限,整数类型
        :param user_info:   用户信息,字典类型
        '''
        self.user_name = user_name
        self.password = password
        self.status = status
        self.authority = authority
        self.user_info = user_info

    def show_info(self):
        '''查看user_info属性'''
        print("account_id: \033[32;1m{}\033[0m".format(self.account_id))
        if self.user_info:
            for k in self.user_info:
                print("{}: \033[32;1m{}\033[0m".format(k, self.user_info[k]))

    def create(self):
        '''
        创建新账号
        :return: 账户实例
        '''
        # 获取自增长id
        begin_id = 10000
        auto_increment_file = "%s/increment_id" % os.path.dirname(
            Account.db_path)
        if os.path.exists(auto_increment_file):
            line = Account.db.load_pickle_data(auto_increment_file)
            auto_increment_id = int(line) + 1
        else:  # 自增长id文件不存在
            id_list = []
            files_list = os.listdir(Account.db_path)
            for f in files_list:
                exist_flag = re.match(r'^(\d{5,})', f)
                if exist_flag:
                    id_list.append(f)

            if id_list:
                id_list.sort()
                max_id = int(id_list[-1])
                auto_increment_id = max_id + 1
            else:
                auto_increment_id = begin_id

        self.account_id = auto_increment_id
        check_flag = self.check_user_name(auto_increment_id)
        if not check_flag:  # 用户名不存在,才创建用户
            user_file = "%s/%s" % (Account.db_path, auto_increment_id)
            Account.db.dump_pickle_data(auto_increment_file, auto_increment_id)
            Account.db.dump_pickle_data(user_file, self)
            return self
        else:
            print("User name [\033[31;1m%s\033[0m] has been registered!" %
                  self.user_name)
            return False

    def check_user_name(self, account_id):
        '''
        查询数据库用户名是否存在
        :param account_id:  用户名,字符类型
        :return:  True 存在,False 不存在
        '''
        user_names = []  # 初始化用户名数据库
        exist_flag = False  # 初始存在标记
        user_names_file = "%s/user_names" % Account.db_path
        if os.path.exists(user_names_file):
            user_names = Account.db.load_pickle_data(user_names_file)
            for usr in user_names:
                if usr["user_name"] == self.user_name:
                    exist_flag = usr["account_id"]
                    return exist_flag

        user_names.append({
            "account_id": account_id,
            "user_name": self.user_name
        })
        Account.db.dump_pickle_data(user_names_file, user_names)

    @staticmethod
    def get_account_data(account_id):
        '''
        获取账户数据
        :param account_id: 账户id
        :return:
        '''
        exist_flag = False
        user_file = "%s/%s" % (Account.db_path, account_id)
        if os.path.exists(user_file):
            account = Account.db.load_pickle_data(user_file)
            return account
        print("Account [\033[31;1m%s\033[0m] does not exist!" % account_id)
        return exist_flag

    @staticmethod
    def get_account_id(user_name):
        '''
        用user_name查询出account_id
        :param user_name:
        :return:
        '''
        exist_flag = False
        user_name_file = "%s/user_names" % Account.db_path
        if os.path.exists(user_name_file):
            user_names = Account.db.load_pickle_data(
                user_name_file)  # 获取用户名:id 的列表数据
            for u_n in user_names:
                if u_n['user_name'] == user_name:
                    exist_flag = u_n['account_id']
                    return exist_flag

        print("User name [\033[31;1m%s\033[0m] does not exist!" % user_name)
        return exist_flag

    def save_data(self, account_id):
        '''保存数据至数据库
        :param account_id: 帐户id
        '''
        user_file = "%s/%s" % (Account.db_path, account_id)
        Account.db.dump_pickle_data(user_file, self)  # 保存帐户数据

    def login(self):
        '''
        用户输入的是账号,通过账号获取account_id验证登录
        :return:    账号实例
        '''
        account_id = self.get_account_id(self.user_name)
        if account_id:
            account = self.get_account_data(account_id)
            if account.password == self.password:
                if self.status == settings.STATUS['normal']:
                    return account
                else:
                    print(
                        "Account locked, [\033[31;1m%s\033[0m] sign in failed!"
                        % self.user_name)
                    return False
            else:
                print("Password error, [\033[31;1m%s\033[0m] sign in failed!" %
                      self.user_name)
                return False
        else:
            print("User name [\033[31;1m%s\033[0m] does not exist!" %
                  self.user_name)
            return False
예제 #6
0
파일: base.py 프로젝트: tianya3796/pystudy
class BaseDb(object):
    '''基础数据库类'''
    db = Db(settings.BASE_DATABASE)
    db_path = "%s/base.db" % db.db_handler()

    def __init__(self):
        '''
        初始化基础数据课程和学校
        '''
        if os.path.exists(BaseDb.db_path):  # 初始数据库存在时,不做任何操作
            return None

        # 创建课程
        java = Course("java", 8000)
        linux = Course("linux", 10300)
        python = Course("python", 12000)

        # 创建学校两所,北京An,上海An
        beijing_an_school = School("beijing_an_school", "beijing",
                                   {"teachers": []},
                                   {"courses": [java, linux]},
                                   {"students": []}, {"grades": []})
        shanghai_an_school = School("shanghai_an_school", "shanghai",
                                    {"teachers": []},
                                    {"courses": [java, python]},
                                    {"students": []}, {"grades": []})
        base_data = {"schools": [beijing_an_school, shanghai_an_school]}
        self.save_data(base_data)

        admin_username = '******'
        admin_password = '******'
        status = 1
        authority = 9
        admin = Admin(admin_username, admin_password, status, authority)
        admin.create()

    @staticmethod
    def save_data(base_data):
        '''
        保存基础数据库
        :param base_data:   基础数据
        :return:
        '''
        BaseDb.db.dump_pickle_data(BaseDb.db_path, base_data)

    @staticmethod
    def get_data():
        base_data = BaseDb.db.load_pickle_data(BaseDb.db_path)
        # 从文件中读取信息
        schools = base_data['schools']
        attr_students = 'students'
        attr_teachers = 'teachers'
        for school in schools:
            students = getattr(school, attr_students)[attr_students]
            teachers = getattr(school, attr_teachers)[attr_teachers]
            for student in students:
                account_id = student.account.account_id
                student.account = student.account.get_account_data(account_id)
                user_info_dict = student.account.user_info
                student.name = user_info_dict.get['name']
                student.sex = user_info_dict.get['sex']
                student.age = user_info_dict.get['age']
            for teacher in teachers:
                account_id = teacher.account.account_id
                teacher.account = teacher.account.get_account_data(account_id)
                user_info_dict = teacher.account.user_info
                teacher.name = user_info_dict.get['name']
                teacher.sex = user_info_dict.get['sex']
                teacher.age = user_info_dict.get['age']
        return base_data
예제 #7
0
class Account(object):
    '''
    账号类
    '''
    db = Db(settings.ACCOUNT_DATABASE)  #数据库连接,公共属性
    db_path = db.db_handler()

    def __init__(self,
                 user_name,
                 password,
                 status=settings.STATUS['normal'],
                 authority=settings.AUTHORITY['student'],
                 user_info={}):
        '''
        定义账号属性
        :param user_name: 用户名,字符类型 
        :param password: 密码,字条类型
        :param status: 账号状态和账号账号权限,数字整形
        :param authority: 账号权限,数字整型
        :param user_info: 用户信息,字典类型
        '''
        self.user_name = user_name
        self.password = password
        self.status = status  #0为锁定用户,1为正常
        self.authority = authority  #1为普通学员,2为讲师,8为admin用户
        self.user_info = user_info  #学员、讲师、学校信息

    def show_info(self):
        '''查看user_info属性'''
        print("account_id: \033\[32;1m{}\033[0m".format(self.account_id))
        if self.user_info:
            for k in self.user_info:
                print("{}: \033\[32;1m{}\033[0m".format(k, self.user_info[k]))

    def create(self):
        '''
        创建新账号
        :return: 返回账户实例(自己)
        '''
        #获取自增长ID
        begin_id = 10000
        auth_increment_file = "%s/increment_id" % os.path.dirname(
            Account.db_path)
        if os.path.exists(auth_increment_file):  #自增长id文件存在时
            line = Account.db.load_pickle_date(auth_increment_file)
            auth_increment_id = int(line) + 1
        else:  #自增长id文件不存在时
            id_list = []  #账户数据文件
            files_list = os.listdir(Account.db_path)
            for f in files_list:
                exist_flag = re.match(r'^(\d{5,})', f)
                if exist_flag:  #有账号存在时
                    id_list.append(f)

            if id_list:
                id_list.sort()
                max_id = int(id_list[-1])
                auto_increment_id = max_id + 1
            else:
                auto_increment_id = begin_id  #账号数据不存在

        self.account_id = auto_increment_id  #账号ID
        check_flag = self.check_user_name(auto_increment_id)  #检查用户名是否存在
        user_file = "%s/%s" % (Account.db_path, auto_increment_id)
        if not check_flag:  #用户名不存在,才创建用户
            Account.db.dump_pickle_data(auth_increment_file, auth_increment_id)
            Account.db.dump_pickle_data(user_file, self)  #保存账户数据,后面的self暂不是很明白
            return self
        else:
            print("User name [\033[31;1m%s\033[0m] has been registered!" %
                  self.account_id)
            return self

    def check_user_name(self, account_id):
        '''
        用account_id 检查用户名是否存在于数据库
        :param account_id:  用户名,字符类型
        :return: 存在则为真,否则为假
        '''
        user_names = []  # 初始化用户名数据库
        exist_flag = False  # 初始化存在标记
        user_names_file = "%s/user_names" % Account.db_path
        if os.path.exists(user_names_file):
            user_names = Account.db.load_pickle_date(user_names_file)

            for u_n in user_names:
                if u_n["user_name"] == self.user_name:  #存在
                    exist_flag = u_n["account_id"]
                    return exist_flag

        user_names.append({
            "account_id": account_id,
            "user_names": self.user_name
        })
        result = Account.db.dump_pickle_data(user_names_file, user_names)

        return exist_flag

    def get_account_id(self, user_name):
        '''
        用user_name 查询出account_id
        :param user_name: 
        :return: 
        '''
        exist_flag = False  #初始化存在标记
        user_names_file = "%s/user_names" % Account.db_path
        if os.path.exists(user_names_file):
            user_names = Account.db.load_pickle_date(user_names_file)

            for u_n in user_names:
                if u_n["user_name"] == user_name:  #存在
                    exist_flag = u_n["account_id"]
                    return exist_flag
        return exist_flag

    def get_account_data(self, account_id):
        '''
        获取账号数据
        :param account_id: 账户id
        :return: 
        '''
        exist_flag = False  #初始化存在标记
        user_file = "%s/%s" % (Account.db_path, account_id)
        if os.path.exists(user_file):
            account = Account.db.load_pickle_date(user_file)

            account_data = {
                "account_id": account_id,
                "user_name": self.user_name,
                "password": self.password,
                "status": self.status,
                "authority": self.authority,
                "user_info": self.user_info
            }
            return account
        return exist_flag

    def save_data(self, account_id):
        '''
        保存数据到数据库
        :param account_id: 账户id 
        :return: 
        '''
        user_file = "%s/%s" % (Account.db_path, account_id)
        Account.db.dump_pickle_data(user_file, self)  #保存账号数据
        return True

    def login(self):
        '''
        登录
        因为用户名输入的是用户名,需要转化成account_id来验证
        :return: 
        '''
        account_id = self.get_account_data(self.user_name)
        if account_id:
            account_data = self.get_account_data(account_id)
            user_file = "%s/%s" % (Account.db_path, account_id)
            if os.path.exists(user_file):
                account = Account.db.load_pickle_date(user_file)  #获取用户账号

                if account.password == self.password:  #验证密码
                    if self.status == settings.STATUS['normal']:
                        return account  #返回账号实例
                    else:
                        print(
                            "Account locked,[\033[31;1m %s \033[0m] sign in failed !"
                            % self.user_name)
                else:
                    print(
                        "Password error,[\033[31;1m %s \033[0m] sign in failed !"
                        % self.user_name)
                    return False
            else:
                print("Account [\033[31;1m %s \033[0m] data exception " %
                      account_id)
        else:
            print("User name [\033[31;1m %s \033[0m]" % self.user_name)