0
点赞
收藏
分享

微信扫一扫

Python语法进阶篇 - 81 - 综合实战 - 抽奖系统之admin模块 - 对用户添加封禁身份修改

万叶集
🎉 隐约雷鸣,阴霾天空。 🎉
🎉 但盼风雨来,能留你在此。 🎉

文章目录


该章节我们将来开发 “admin.py” 模块的相关功能,今天主要有5件事情需要实现:

🐳 admin 类的搭建

代码示例如下:

# coding:utf-8


import os

from base import Base


"""
    ***************************************************************************************************************
    1、admin 类的搭建(继承 Base 类)
    2、获取当前用户函数(包含获取身份)
    3、添加用户(判断当前身份是否是管理员)
    4、冻结与恢复用户(active 标签判断用户是否可用的标识)
    5、修改用户身份(管理员操作修改 role为 "admin" 或者 "normal" ;"normal"用户可参与抽奖,"admin"用户只能是为普通用户服务的角色)
    ***************************************************************************************************************
"""


class Admin(Base):
    def __init__(self, username, user_json, gift_json):     # 定义构造函数,同时也利用super()函数继承并使用 Base 类的构造函数
        self.username = username
        super().__init__(user_json, gift_json)

        
if __name__ == '__main__':
    user_path = os.path.join(os.getcwd(), "storage", "user.json")
    gift_path = os.path.join(os.getcwd(), "storage", "gift.json")

	admin = Admin('Neo', user_path, gift_path)

运行结果如下:



🐳 获取用户的函数

接下来编写获取用户的函数,首先最重要的就是获取用户的身份。

代码示例如下:

# coding:utf-8


import os

from base import Base
from common.error import NotUserError, UserActiveError, RoleError


"""
    ***************************************************************************************************************
    1、admin 类的搭建(继承 Base 类)
    2、获取当前用户函数(包含获取身份)
    3、添加用户(判断当前身份是否是管理员)
    4、冻结与恢复用户(active 标签判断用户是否可用的标识)
    5、修改用户身份(管理员操作修改 role为 "admin" 或者 "normal" ;"normal"用户可参与抽奖,"admin"用户只能是为普通用户服务的角色)
    ***************************************************************************************************************
"""


class Admin(Base):
    def __init__(self, username, user_json, gift_json):     # 定义构造函数,同时也利用super()函数继承并使用 Base 类的构造函数
        self.username = username
        super().__init__(user_json, gift_json)
        self.get_user()


    def get_user(self):
        users = self._Base__read_users()    # 注意 "__read_users()" 是 Base 类的私有函数,不能直接调用 "self.__read_users()"
        current_user = users.get(self.username)

        if current_user is None:            # 判断用户是否存在,不存在则抛出自定义 "error.py" 模块的 NotUserError 异常
            raise NotUserError('not user %s' % self.username)

        if current_user.get('active') == False:     # 判断用户可用状态,不可用则抛出自定义 "error.py" 模块的 UserActiveError 异常
            raise UserActiveError('the user %s had not use' % self.username)

        if current_user.get('role') != 'admin':
            raise RoleError('permission by admin')

        self.user = current_user
        self.role = current_user.get('role')
        self.name = current_user.get('username')
        self.active = current_user.get('active')


if __name__ == '__main__':
    gift_path = os.path.join(os.getcwd(), 'storage', 'gift.json')
    user_path = os.path.join(os.getcwd(), 'storage', 'user.json')

    admin = Admin('Neo', user_path, gift_path)

    admin.get_user()
    print(admin.name, admin.role)

运行结果如下:



🐳 添加用户

添加用户之前,我们需要判断是否是 “admin” 的身份。

# coding:utf-8


import os

from base import Base
from common.error import NotUserError, UserActiveError, RoleError


"""
    ***************************************************************************************************************
    1、admin 类的搭建(继承 Base 类)
    2、获取当前用户函数(包含获取身份)
    3、添加用户(判断当前身份是否是管理员)
    4、冻结与恢复用户(active 标签判断用户是否可用的标识)
    5、修改用户身份(管理员操作修改 role为 "admin" 或者 "normal" ;"normal"用户可参与抽奖,"admin"用户只能是为普通用户服务的角色)
    ***************************************************************************************************************
"""


class Admin(Base):
    def __init__(self, username, user_json, gift_json):     # 定义构造函数,同时也利用super()函数继承并使用 Base 类的构造函数
        self.username = username
        super().__init__(user_json, gift_json)
        self.get_user()


    def get_user(self):
        users = self._Base__read_users()    # 注意 "__read_users()" 是 Base 类的私有函数,不能直接调用 "self.__read_users()"
        current_user = users.get(self.username)

        if current_user is None:            # 判断用户是否存在,不存在则抛出自定义 "error.py" 模块的 NotUserError 异常
            raise NotUserError('not user %s' % self.username)

        if current_user.get('active') == False:     # 判断用户可用状态,不可用则抛出自定义 "error.py" 模块的 UserActiveError 异常
            raise UserActiveError('the user %s had not use' % self.username)

        if current_user.get('role') != 'admin':
            raise RoleError('permission by admin')

        self.user = current_user
        self.role = current_user.get('role')
        self.name = current_user.get('username')
        self.active = current_user.get('active')


    def __check(self, message):     # 判断是否是管理员身份
        self.get_user()
        if self.role != 'admin':
            raise Exception(message)


    def add_user(self, username, role):     # 添加用户函数
        self.__check('permission')
        self._Base__write_user(username=username, role=role)        # 调用 Base 类的 "__write_user()" 函数添加用户啊


if __name__ == '__main__':
    gift_path = os.path.join(os.getcwd(), 'storage', 'gift.json')
    user_path = os.path.join(os.getcwd(), 'storage', 'user.json')

    admin = Admin('Neo', user_path, gift_path)

    # admin.get_user()
    # print(admin.name, admin.role)

    admin.add_user(username="Adem", role="normal")

    admin.get_user()

执行结果如下:



🐳 冻结与恢复用户及修改用户的身份

冻结用户、恢复用户就是通过 active 标签判断用户是否可用, true 为可用状态, false 即禁用状态;

修改用户身份就更简单了,直接修改 role 标签即可,目前只有两个身份 'admin' 与 'normal'

代码示例如下:

# coding:utf-8


import os

from base import Base
from common.error import NotUserError, UserActiveError, RoleError


"""
    ***************************************************************************************************************
    1、admin 类的搭建(继承 Base 类)
    2、获取当前用户函数(包含获取身份)
    3、添加用户(判断当前身份是否是管理员)
    4、冻结与恢复用户(active 标签判断用户是否可用的标识)
    5、修改用户身份(管理员操作修改 role为 "admin" 或者 "normal" ;"normal"用户可参与抽奖,"admin"用户只能是为普通用户服务的角色)
    ***************************************************************************************************************
"""


class Admin(Base):
    def __init__(self, username, user_json, gift_json):     # 定义构造函数,同时也利用super()函数继承并使用 Base 类的构造函数
        self.username = username
        super().__init__(user_json, gift_json)
        self.get_user()


    def get_user(self):
        users = self._Base__read_users()    # 注意 "__read_users()" 是 Base 类的私有函数,不能直接调用 "self.__read_users()"
        current_user = users.get(self.username)

        if current_user is None:            # 判断用户是否存在,不存在则抛出自定义 "error.py" 模块的 NotUserError 异常
            raise NotUserError('not user %s' % self.username)

        if current_user.get('active') == False:     # 判断用户可用状态,不可用则抛出自定义 "error.py" 模块的 UserActiveError 异常
            raise UserActiveError('the user %s had not use' % self.username)

        if current_user.get('role') != 'admin':
            raise RoleError('permission by admin')

        self.user = current_user
        self.role = current_user.get('role')
        self.name = current_user.get('username')
        self.active = current_user.get('active')


    def __check(self, message):     # 判断是否是管理员身份
        self.get_user()
        if self.role != 'admin':
            raise Exception(message)


    def add_user(self, username, role):     # 添加用户函数
        self.__check('permission')
        self._Base__write_user(username=username, role=role)        # 调用 Base 类的 "__write_user()" 函数添加用户


    def update_user_active(self, username):     # 变更用户的 active 状态
        self.__check('permission')
        self._Base__change_acitve(username=username)    # 调用 Base 类的 "__change_acitve" 函数变更用户的 active 状态


    def update_user_role(self, username, role):  # 变更用户的 role 状态 (权限)
        self.__check('permission')
        self._Base__change_role(username=username, role=role)   # 调用 Base 类的 "__change_role" 函数变更用户的 role 状态


if __name__ == '__main__':
    gift_path = os.path.join(os.getcwd(), 'storage', 'gift.json')
    user_path = os.path.join(os.getcwd(), 'storage', 'user.json')

    admin = Admin('Neo', user_path, gift_path)

    # admin.get_user()
    # print(admin.name, admin.role)

    admin.update_user_active(username="Adem")

    admin.update_user_role(username='Adem', role='admin')

运行结果如下:(将 “user.json” 文件内的内容进行JSON格式化)



举报

相关推荐

0 条评论