当前位置: 首页 > news >正文

蚌埠市网站建设_网站建设公司_产品经理_seo优化

动漫网站源码免费,上传wordpress,wordpress 远程图片本地化,关于吃喝玩乐的网站建设策划闭包表—树状结构数据的数据库表设计 闭包表模型 闭包表#xff08;Closure Table#xff09;是一种通过空间换时间的模型#xff0c;它是用一个专门的关系表#xff08;其实这也是我们推荐的归一化方式#xff09;来记录树上节点之间的层级关系以及距离。 场景 我们 …闭包表—树状结构数据的数据库表设计 闭包表模型 闭包表Closure Table是一种通过空间换时间的模型它是用一个专门的关系表其实这也是我们推荐的归一化方式来记录树上节点之间的层级关系以及距离。 场景 我们 基于 django orm实现一个文件树文件夹直接可以实现无限嵌套 models # 文件详情表主要用于记录文件名 class DmFileDetail(models.Model):file_name models.CharField(文件名文件夹名, max_length50)is_file models.BooleanField(是否是文件, defaultFalse)user_id models.IntegerField(用户id, default0)create_time models.IntegerField(创建时间, default0)update_time models.IntegerField(创建时间, default0)is_del models.BooleanField(是否删除, defaultFalse)class Meta:db_table inchat_dm_file_detailverbose_name verbose_name_plural u数字人文件详情表def __str__(self):return self.file_name# 文件关系表主要用户记录文件之间的关联即路径 class DmFileRelation(models.Model):ancestor_id models.IntegerField(祖先节点ID)descendant_id models.IntegerField(子孙节点ID)depth models.IntegerField(深度层级, db_indexTrue)user_id models.IntegerField(用户id, default0, db_indexTrue)is_del models.BooleanField(是否删除, defaultFalse)class Meta:db_table inchat_dm_file_relationindex_together (ancestor_id, descendant_id)verbose_name verbose_name_plural u数字人文件关系表idfile_name1AAA2aaa.pdf idancestor_iddescendant_iddepth111022203121 增删改查 class DmRelationNode:关系节点NAME DmRelationNodeRELATION_CLIENT DmFileRelationclassmethoddef insert_relation_node(cls, node_id, user_id, parent_id):插入新的关系节点# 自身insert_self cls.RELATION_CLIENT(ancestor_idparent_id,descendant_idnode_id,user_iduser_id,depth1)insert_list []# 获取父节点所有祖先parent_relation cls.RELATION_CLIENT.objects.filter(descendant_idparent_id) \.values_list(ancestor_id, depth)for ancestor_id, depth in parent_relation:insert_data cls.RELATION_CLIENT(ancestor_idancestor_id,descendant_idnode_id,depthdepth 1,user_iduser_id)insert_list.append(insert_data)# 插入自身insert_list.append(insert_self)logger.info(%s insert_relation_node.node_id:%s,parent_id:%s,insert_list:%s, cls.NAME, node_id, parent_id,insert_list)ret cls.RELATION_CLIENT.objects.bulk_create(insert_list)logger.info(%s insert_relation_node.node_id:%s,parent_id:%s,ret_list:%s, cls.NAME, node_id, parent_id, ret)return retclassmethoddef get_ancestor_relation(cls, node_id):获取某个节点的所有祖先节点arges [ancestor_id, descendant_id, depth]ancestor_relation_list cls.RELATION_CLIENT.objects.filter(descendant_idnode_id, is_delFalse).values(*arges)relation_map dict()relation_dict relation_mapfor ancestor in ancestor_relation_list:relation_dict[id] ancestor[ancestor_id]if ancestor[ancestor_id] ! node_id:relation_dict[children] {}relation_dict relation_dict[children]return ancestor_relation_listclassmethoddef get_descendant_relation(cls, node_id):获取所有的子节点arges [ancestor_id, descendant_id, depth]descendant_relation_list cls.RELATION_CLIENT.objects.filter(ancestor_idnode_id, is_delFalse).values(*arges)return descendant_relation_listclassmethoddef get_direct_relation(cls, user_id):获取所有直系arges [ancestor_id, descendant_id, depth]direct_relation cls.RELATION_CLIENT.objects.filter(depth1, user_iduser_id, is_delFalse).values(*arges)return direct_relationclassmethoddef get_children_node(cls, node_id):获取某节点的子节点children_node cls.RELATION_CLIENT.objects.filter(depth1, ancestor_idnode_id, is_delFalse) \.values_list(descendant_id, flatTrue)return children_nodeclassmethoddef remove_node(cls, node_id):删除节点logger.info(%s remove_node. node_id:%s, cls.NAME, node_id)query Q(ancestor_idnode_id, is_delFalse) | Q(descendant_idnode_id, is_delFalse)res cls.RELATION_CLIENT.objects.filter(query).update(is_delTrue)logger.info(%s remove_node. node_id:%s,count:%s, cls.NAME, node_id, res)return res以下 是一些常规的操作 class DmFileTree:DM文件树NAME DmFileTreeDETAIL_CLIENT DmFileDetailRELATION_NODE_CLIENT DmRelationNodeFILE_SAVE_DIR media/dm/classmethoddef get_file_map(cls, user_id):获取用户所有文件文件名file_detail cls.DETAIL_CLIENT.objects.filter(user_iduser_id).values(id, file_name, path, is_file)file_map dict()for file in file_detail:file_dict dict(idfile[id],namefile[file_name],is_filefile[is_file],filePathcls.FILE_SAVE_DIR file[path] file[file_name])file_map[file[id]] file_dictreturn file_mapclassmethoddef add_file(cls, user_id, file_name, parent_id, path, is_fileFalse):新建文件夹kwargs dict(file_namefile_name,pathpath,is_fileis_file,user_iduser_id,create_timeget_cur_timestamp())file_obj cls.DETAIL_CLIENT.objects.create(**kwargs)if not file_obj:logger.error(%s add_file failed. kwargs:%s, cls.NAME, kwargs)return Falseres cls.RELATION_NODE_CLIENT.insert_relation_node(node_idfile_obj.id, user_iduser_id, parent_idparent_id)if not res:return Falsereturn dict(idfile_obj.id, namefile_name)classmethoddef get_file_path(cls, file_id):获取文件路径ancestor_query cls.RELATION_NODE_CLIENT.get_ancestor_relation(file_id)ancestor map(lambda x: x[ancestor_id], ancestor_query)# 过滤0ancestor list(filter(lambda x: x 0, ancestor))# 排序ancestor.sort()path /.join(map(str, ancestor))return / path / if path else /classmethoddef get_all_files(cls, user_id):# 获取所有文件名字典file_map cls.get_file_map(user_id)# 查询所有子目录及文件files_relation_list cls.RELATION_NODE_CLIENT.get_direct_relation(user_id)file_info {a[descendant_id]: file_map.get(a[descendant_id]) or {} for a in files_relation_list}tree cls.list_to_tree(files_relation_list, file_info)return treeclassmethoddef get_child_files(cls, user_id, parent_id):获取下级文件# 获取所有文件名字典file_map cls.get_file_map(user_id)file_list cls.RELATION_NODE_CLIENT.get_children_node(node_idparent_id)files map(lambda x: dict(idx, namefile_map.get(x) or ), file_list)return filesstaticmethoddef list_to_tree(data, node_dict):将节点列表转换成树形结构字典:param data: 带有 id 和 parent_id 属性的节点列表:param node_dict: 单节点的数据结构字典:return: 树形结构字典tree []# 遍历每一个节点将其添加到父节点的字典或根节点列表中for item in data:id item[descendant_id]parent_id item[ancestor_id]# 如果父节点为 None则将当前节点添加到根节点列表中if not parent_id:tree.append(node_dict[id])# 如果父节点存在则将当前节点添加到父节点的 children 属性中else:parent node_dict[parent_id]if children not in parent:parent[children] []parent[children].append(node_dict[id])return treeclassmethoddef delete_file(cls, file_id):文件删除res1 cls.DETAIL_CLIENT.objects.filter(idfile_id).update(is_delTrue)logger.info(%s delete_file. file_id:%s, count:%s, cls.NAME, file_id, res1)res2 cls.RELATION_NODE_CLIENT.remove_node(file_id)return res1, res2classmethoddef search_file(cls, file_name):搜索文件query_set cls.DETAIL_CLIENT.objects.filter(file_name__icontainsfile_name) \.values(id, file_name, path, is_file)file_list []for file in query_set:file_dict dict(idfile[id],namefile[file_name],is_filefile[is_file],filePathmedia/dm_upload file[path])file_list.append(file_dict)return file_listclassmethoddef get_file_url(cls, file_id, file_objNone):获取文件下载链接file_url if not file_obj:file_obj cls.DETAIL_CLIENT.objects.filter(idfile_id).first()if file_obj:file_url http://127.0.0.1:8000/ cls.FILE_SAVE_DIR file_obj.path file_obj.file_namereturn file_url除此之外还有移动、复制文件夹。移动就是先删除再新增
http://www.ihoyoo.com/news/124328.html

相关文章:

  • 网站代运营公司有哪些你不会百度吗网页生成
  • 万基城市建设有限公司网站国内外十大免费crm软件推荐
  • 商城网站具体需求c 手机网站开发模板
  • 网站建设经费预算表网站开发合同模版
  • 北京网站名称注册证书从做系统后以前的网站打不开了怎么办
  • 临漳网站制作wordpress 显示代码
  • 公司网站建设需要什么科目企业建设网站能否报销
  • 做外汇需要关注哪几个网站汕头网站设计公司
  • 天峻县公司网站建设网站建站前期准备工作
  • 上海专业网站建设咨询wordpress目录404
  • 用php做网站后台莱芜网站建设sikesoft
  • 河北衡水市网站制作的公司长沙网站托管公司排名
  • 住房建设厅官方网站微信广告代理好做吗
  • 发光字体制作网站站长统计网站
  • 模板网站官网杭州app开发公司定制外包
  • 罗湖区住房和建设局网站下载网址大全到桌面
  • 上海网站开发怎么做无极分期网站
  • 网站推广存在的问题wordpress主題很慢
  • 建设网站公司兴田德润大唐集团电子商务平台
  • 怎么做电商网站 用户画像哪个网站做贺卡做的好
  • 个人电商怎么做厦门seo排名外包
  • 建设大厦网站做手机app制作教程
  • 怎么样建设公司网站标志设计英文
  • 怎么利用网站做cpa推广山东济南公厕
  • 那个网站可以做公示餐饮加盟什么网站建设
  • 滨江区网站开发公司广州seo优化费用
  • 做网站怎么安装数据库制作网页需要的技术
  • 建立微信商城网站网页制作标准
  • 2018年企业网站优化应该怎么做iis6.0新发布网站访问速度慢
  • 东莞p2p网站开发费用建设网站东莞