数据库中的菜单设计

Django 中代码的菜单设计

容我想一想为什么后这么设计,方便性在哪里

 class CoreModel(models.Model):
    """
    核心标准抽象模型模型,可直接继承使用
    增加审计字段, 覆盖字段时, 字段名称请勿修改, 必须统一审计字段名称
    """
    description = DescriptionField()  # 描述
    creator = models.ForeignKey(to=settings.AUTH_USER_MODEL, related_query_name='creator_query', null=True,
                                verbose_name='创建者', on_delete=SET_NULL, db_constraint=False)  # 创建者
    modifier = ModifierCharField()  # 修改者
    dept_belong_id = models.CharField(max_length=64, verbose_name="数据归属部门", null=True, blank=True)
    update_datetime = UpdateDateTimeField()  # 修改时间
    create_datetime = CreateDateTimeField()  # 创建时间

    class Meta:
        abstract = True
        verbose_name = '核心模型'
        verbose_name_plural = verbose_name
class Menu(CoreModel):
    # MENU_TYPE_CHOICES = (
    #     ("0", "目录"),
    #     ("1", "菜单"),
    #     ("2", "按钮"),
    # )
    # METHOD_CHOICE = (
    #     ('GET', 'GET'),
    #     ('POST', 'POST'),
    #     ('PUT', 'PUT'),
    #     ('PATCH', 'PATCH'),
    #     ('DELETE', 'DELETE'),
    #     ('HEAD', 'HEAD'),
    #     ('OPTIONS', 'OPTIONS'),
    #     ('TRACE', 'TRACE'),
    # )
    parentId = ForeignKey(to='Menu', on_delete=CASCADE, verbose_name="上级菜单", null=True, blank=True, db_constraint=False)
    menuType = CharField(max_length=8, verbose_name="菜单类型")
    icon = CharField(max_length=64, verbose_name="菜单图标", null=True, blank=True)
    name = CharField(max_length=64, verbose_name="菜单名称")
    orderNum = IntegerField(verbose_name="显示排序")
    isFrame = CharField(max_length=8, verbose_name="是否外链")
    web_path = CharField(max_length=128, verbose_name="前端路由地址", null=True, blank=True)
    component_path = CharField(max_length=128, verbose_name="前端组件路径", null=True, blank=True)
    interface_path = CharField(max_length=256, verbose_name="后端接口路径", null=True, blank=True)
    interface_method = CharField(max_length=16, default='GET', verbose_name="接口请求方式")
    perms = CharField(max_length=256, verbose_name="权限标识", null=True, blank=True)
    status = CharField(max_length=8, verbose_name="菜单状态")
    visible = CharField(max_length=8, verbose_name="显示状态")
    isCache = CharField(max_length=8, verbose_name="是否缓存")

    @classmethod
    def get_interface_dict(cls):
        """
        获取所有接口列表
        :return:
        """
        try:
            interface_dict = cache.get('permission_interface_dict', {})
        except:
            interface_dict = {}
        if not interface_dict:
            for ele in Menu.objects.filter(~Q(interface_path=''), ~Q(interface_path=None), status='1', ).values(
                    'interface_path', 'interface_method'):
                if ele.get('interface_method') in interface_dict:
                    interface_dict[ele.get('interface_method', '')].append(ele.get('interface_path'))
                else:
                    interface_dict[ele.get('interface_method', '')] = [ele.get('interface_path')]
            cache.set('permission_interface_dict', interface_dict, 84600)
        return interface_dict

    @classmethod
    def delete_cache(cls):
        """
        清空缓存中的接口列表
        :return:
        """
        cache.delete('permission_interface_dict')

    class Meta:
        verbose_name = '菜单管理'
        verbose_name_plural = verbose_name
    def __str__(self):
        return f"{self.name}"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值