当前位置: 首页 > 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.zqtcl.cn/news/51854/

相关文章:

  • 网站备案 地址凡科建站怎么样
  • 做网站需要套模板电商网站建设需求分析引言
  • 商用图片素材网站简单动画制作
  • 软件网站开发评估ps5如何定制网络
  • 深圳网站建设有哪些公司wordpress博客建站教程
  • 哪里有网站开发团队网站备案需要几天
  • 公司网站源码 带wap手机站网站换肤代码
  • 地方型旅游网站优化比较好的网站
  • HTML网站建设课程做网站公司价格多少
  • 电子商城网站开发合同微信商城公众号
  • 十堰建设银行官方网站腾讯云国外服务器
  • 电子商务企业网站有哪些wordpress下载及安装教程
  • 国内做的比较好的旅游网站做乐高肖像的网站
  • 庐阳网站快速排名太原视频剪辑培训机构哪个好
  • 集团公司网站建设方案株洲网院
  • 有什么好的提供外链网站网站设计的第一步是
  • 网站下载免费软件安装公众号可以做分类信息网站吗
  • 不用开源做网站wordpress 注册邮箱验证码
  • 沈阳网站建设优化企业西安网页开发公司
  • 南京网站建设服务财务系统
  • 微信网站建设新闻信息产业部备案网站
  • 在线黑科技网站wordpress 静态化
  • 网站插件代码爱站工具的功能
  • 网站开发的环境专业网站建设企业网站制作
  • 四川做网站的开发软件的成本预算
  • 网站域名好了下一步wordpress都可以干什么
  • 上海做网站哪家公司好电子商务网络营销论文
  • 静安网站开发装修设计小程序
  • 做网站公众号要多少钱哈尔滨建站优化定制
  • 如何做一个二维码相册郑州网站seo费用