国庆假第三天,1测试自己写的服务器资产管理server端和client端程序;2复习生成器等知识
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了国庆假第三天,1测试自己写的服务器资产管理server端和client端程序;2复习生成器等知识相关的知识,希望对你有一定的参考价值。
一、检测自己写的CMDB出现的BUG
1、server端在视图函数server中
在输入条件查询时,只取datefield数据的年月日部分写成了_date,应是__date。此外还有__year,__month,__day。
条件查询中,除了__lt外还有:__lte小于或等于;__gt 大于;__gte大于或等于;__ne不等于(filter(slot__ne=‘5‘),也可以用exclude(slot=‘5‘));__iexact忽略大小写;__in成员属性;__startwith以…开头(有大小写之分);__endwith以…结尾(有大小写之分);__contains包含(有大小写之分);__istartwith、__iendwith忽略大小写的开头结尾;__range在什么范围内,后接一个元祖如filter(id__range=(1,200);
pk查找类型,可以翻译成 (primary_key)__exact.下面两个语句是等价的:
polls.get_object(id__exact=3)
polls.get_object(pk=3)
pk 也可以通过连接进行查询。下面两个语句是等价的:
choices.objects.filter(poll__id__exact=3)
choices.objects.filter(poll__pk=3)
2、server端在插件Memory和Nic类的process方法中
一步一步打印,发现程序在这停止,原因是在筛选不出内存对象集合。
在数据更新测试记录更新日志时发现,即使新旧容量一致也做更新日志,即不管怎样都判断新旧值不相等
原因为client端发过来的容量数据类型为int,而数据库中容量数据类型为float,所以需先做数据类型转换再对比,如红框所写。
3、在server端中插件server.py
在对basic_info和board_inf两个字典进行合并时写成如上红框所写的错误操作,发现永远无数据,这里牢记,dict1.update(dict2)没有返回值,仅是对dict1进行了操作,即用dict2的内容更新dict1。注意,若dict2中重复了dict1的键,则更新,dict2值为update后的值,dict2中键dict1没有则dict1增加。另外,dict2中的键只能是字符串否则会报错!也复习了字典和集合一些实用但生疏的方法。
dictMerged2=dict(dict1, **dict2)
方法等同于:
dictMerged=dict1.copy()
dictMerged.update(dict2)
或者
dictMerged=dict(dict1)
dictMerged.update(dict2)
dict.pop(key)与del(key)区别在于pop方法有返回值,另字典的fromkeys、items、iteritems、iterkeys、itervalues。字典的键只能是不可变类型。
集合主要用于检测成员资格,是无序的,为可变的hashable,另外集合的元素只能是不可变的(可散列的)。所以集合中不能包含集合,若想集合中带集合要用到fronzenset,它是不可变类型
通过对BUG的一步一步排查,发现有助于理解整个程序的运行机制,了解到程序是如何一步一步走的。
二、复习生成器的知识
任何包含yield语句的函数称为生成器。
注意传值是传给yield不是food,yield的返回值是写在yield之后,后面不写默认返回None,这点可以用到连个函数协同工作,返回一个状态值如False,使传值函数停止运行
另外,列表推导式中
os模块中os.walk(directory)遍历一个目录下所有的子目录和子文件,得到也是一个生成器。
以上是关于国庆假第三天,1测试自己写的服务器资产管理server端和client端程序;2复习生成器等知识的主要内容,如果未能解决你的问题,请参考以下文章