# 因为此时为yaml模板,而且只抓取node port,所以这样处理效率快content_dict = parse_yaml(content.replace("{{", "").replace("}}", ""))if 'service' in content_dict.keys():    # 记录本次yaml里所有的node_port,并更新到数据库    now_app_list = []    for service_item in content_dict['service']:        for port_item in service_item['port']:            if 'nodePort' in port_item.keys():                node_port = int(port_item['nodePort'])                if 30000 <= node_port <= 32000:                    # 这里判断比较复杂,如果端口有,而且app相同,不更新。如果端口有,app不一样,报冲突。如果端口没有,可插入。                    now_app_list.append(node_port)                    try:                        AppPort.objects.get(node_port=node_port, app=app)                        pass                    except AppPort.DoesNotExist:                        try:                            AppPort.objects.get(node_port=node_port)                            messages.info(self.request, 'nodeport{}端口冲突!'.format(node_port))                            return HttpResponseRedirect(reverse_lazy("app:yaml_edit", kwargs=self.kwargs))                        except AppPort.DoesNotExist:                            name = '{}-{}'.format(app.name, node_port)                            AppPort.objects.create(                                name=name,                                app=app,                                node_port=node_port                            )                else:                    messages.info(self.request, 'nodeport{}端口不在指定范围内(30000-~32000)!'.format(node_port))                    return HttpResponseRedirect(reverse_lazy("app:yaml_edit", kwargs=self.kwargs))    # 取出AppPort里所有此app的node_port,多余的要清除。    all_app_list = AppPort.objects.filter(app=app).values_list('node_port', flat=True)    if all_app_list:        # 取交集,也就是数据库里多余的端口列表        diff_list = [x for x in all_app_list if x not in now_app_list]        if diff_list:            AppPort.objects.filter(node_port__in=diff_list).delete()
 

感觉上面这段代码,应用的技术点蛮多的,作个记录。

包括其node port的管理思想,提取技巧。

orm的列表扁平化,列表交集,批量删除

django中嵌套的try-except的更多相关文章

  1. django中数据库操作——in操作符

    django一对多关系中,为了实现按照一端查询多端,之前都是用extra操作符,经过查看官方文档还有in这个操作符,用这个实现更简单.直接上代码: 根据查询条件模糊查询所有符合条件的机架列表,然后根据 ...

  2. Django中URL的解析和反查

    add by zhj: 如果想用reverse(namespace1:namespace2:...:namespaceN:name)反查url(注意:用reverse('polls:index')方法 ...

  3. Django 资源 与 知识 Django中自建脚本并使用Django环境 model中的save()方法说明 filter()用法

    Django 资源 与 知识 Django中自建脚本并使用Django环境 model中的save()方法说明 filter()用法 2018/11/06 Chenxin 资料说明 Django基础入 ...

  4. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  5. Mysql事务探索及其在Django中的实践(二)

    继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...

  6. Mysql事务探索及其在Django中的实践(一)

    前言 很早就有想开始写博客的想法,一方面是对自己近期所学知识的一些总结.沉淀,方便以后对过去的知识进行梳理.追溯,一方面也希望能通过博客来认识更多相同技术圈的朋友.所幸近期通过了博客园的申请,那么今天 ...

  7. jsp的 javascript中 嵌套 html 注释

    看到公司的代码,我也是蛋疼了,各种乱. 还发现有很多的jsp的 javascript中 嵌套 html 注释, 这个可行? 我之前可是没用过. 后面查找各种资料发现,这个也是可行的,主要是为了兼容不支 ...

  8. Django 中url补充以及模板继承

    Django中的URL补充 默认值 在url写路由关系的时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"root& ...

  9. django中css问题

    django中加载的css,js,图片其中js和图片可以加载出来,而css没有效果.原因如下: 这是因为你安装的某些IDE 或者其他更改了注册表导致的系统的注册表\HKEY_CLASSES_ROOT\ ...

随机推荐

  1. 汇编和C/C++的混合编程方式

    常用的有三种方式: 在C/C++代码中嵌入汇编指令 汇编调用C/C++ C/C++中调用汇编 实例一: 在C中嵌入汇编: void string_copy(char *dst,const char * ...

  2. ionic4打包和ngix配置

    ionic4打包 ng run app:build --base-href=/edu/course/mobile压缩打包 ng run app:build:production --base-href ...

  3. Nor Flash的理论性能

    简介 为了评估Nor性能优化空间,我需要根据Spec计算出极限情况下,Nor Flash的性能理论值. 在全志的R**相关项目中分别支持ESMT.MXIC.Winbond.GD这4个厂家的Nor Fl ...

  4. Kubernetes 遇到的问题

    Kubernetes 遇到的问题 k8s 版本 k8s v1.13.5 docker 18.09.2 问题一 kubelet 报错 May 22 10:14:42 test-ops-k8s-03 ku ...

  5. c#菜单动态合并 z

    说明 在程序中经常使用弹出菜单,并且一个窗体中可以存在多个弹出菜单.开发过MDI窗体的读者可能都知道,当MDI子窗体最大化时,子窗体和主窗体的菜单能够自动的合并.这是如何实现的呢?本例实现了将两个弹出 ...

  6. ubuntu python 版本管理

    ubuntu 命令行查看 python 目录 $ whereis python # 显示所有得到 python 目录 $ which python  # 显示默认的 python 解释器目录 $ wh ...

  7. Java连载36-IDE使用

    一.主方法注意 每一个类都可以编写一个主方法,但是一般情况下,一个系统只有一个入口,所以主方法一般写一个 二.Myeclipse的使用 1.在workspace中工作区中有一个文件夹.metadata ...

  8. vue开发 element的select下拉框设定初值后,不能重新选择的问题

    问题描述: 用的element的select可多选的下拉选框,在回显后有初始值的情况下,不能修改,也不能再选择 如图,明明点击了一般内勤主管,但没有任何反应 <el-select v-model ...

  9. Spring、SpringMVC、Hibernate整合 ----超详细教程

    一.数据库表 /* Navicat MySQL Data Transfer Source Server : 本地连接 Source Server Version : 50720 Source Host ...

  10. skeleton在心意web上的实践

    通过手动编写skeleton,在fetch数据时显示skeleton loading,数据拉取成功隐藏skeleton 先看下效果图 在component下创建页面对应的skeleton,然后通过在i ...