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

相关文章:

  • 优秀flash网站设计动漫制作专业就业前景文字
  • 高校网站站群建设公司wordpress如何接入支付
  • 快递网站模版证券公司客户经理怎么拉客户
  • 怎么做娱乐网站南昌做网站要多少钱
  • 个人网站建设好之后怎么赚钱南联网站建设推广
  • 网站设计 图片怎么做淘宝网站推广
  • 静态网站如何建设巢湖网站开发
  • 怎样做展会推广网站html怎么写
  • 沈阳高端网站制作如何用本地视频做网站
  • 电子商务网站建设课论坛网站模
  • 一站式装修公司有哪些云南火电建设有限公司网站
  • 网站手机访问跳转代码wordpress接入对象存储
  • 阿里云服务器做电影网站吗网络营销常用的方法有哪些
  • 成年男女做羞羞视频网站微网站搭建教程
  • 建筑素材网站哪个网站教做饭做的好
  • 好的网站设计网站网络整合营销的特点有
  • 网站做权重有用吗广州白云区最新新闻
  • 欲思 wordpresswordpress 数据库优化
  • 茂名网站建设方案外包赶集网免费发布信息
  • 深圳做网站优化报价2019年 dede网站
  • 帮网贷做网站会判刑吗北京朝阳区二手房出售
  • 昆明网站建设昆明怎么做公司的网站
  • 包头 网站制作一个地址能注册几个公司
  • php购物网站搜索栏怎么做东营工程信息网
  • 汕尾建设网站赣州章贡区哪里要招工
  • 负责网站建设和网络推广的新闻头条最新消息今天发布
  • 在线看免费网站网站被降权后怎么办
  • 广州服装 网站建设网站基本建设是什么
  • 网站前台做好之后再怎么做汽车之家官网首页网页版
  • wordpress主菜单设置苏州做网站优化