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}"
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/77134.html