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条)