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

免费背景图片素材网站网站源码程序修改

免费背景图片素材网站,网站源码程序修改,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.dnsts.com.cn/news/152858.html

相关文章:

  • 网站程序和空间区别wordpress自定义发文章界面
  • 设计网站首页新余建站公司
  • 精品课网站制作好用的h5制作软件
  • 四川建设网站电子招标怎么做网站主
  • 怎么上传网站到ftpASP.NET商业级数据库网站开发实战
  • 建网站公司要钱吗视频制作专业软件
  • 帝国后台网站如何设置自动刷新首门户类网站什么意思简单
  • 桥下网站制作哪家好网站建设与规划案例
  • 长尾网站搜索引擎茗匠智能门店管理系统
  • 什么网站做生鲜比较好遵义制作网站
  • php网站开发常用框架简约网站建设
  • 建站购物网站万能本地视频播放器
  • 鸣蝉智能建站网络服务器的功能
  • 网站设计与制作教程1网页seo如何优化
  • 婚纱摄影网站源码创意海报设计
  • 营销型网站创建富源县住房和城乡建设局网站
  • 做国际网站怎么能快速打开哈尔滨铁路局建设网站
  • 白佛网站建设PS做图标兼职网站
  • 如何写网站建设报告开发技术网站开发技术路线
  • 专业免费网站建设一般广州旅游景点
  • 网络科技网站有哪些方面做网站怎样连数据库
  • 专业网站建设费用包括哪些建筑工程证书查询
  • php网站开发结构制作网站要多久
  • 商城网站建设运营合同书成都抖音推广
  • 书城网站开发谷歌推广培训
  • 重庆网站建设找重庆万为在线网站代码生成器
  • 吉安工商注册官方网站企业网站系统官网
  • 关于网站建设 策划文案网站前端设计理念
  • Wordpress用七牛云存储网站静态化对seo
  • 智能网站价格手机网站图片优化