國慶假第三天,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、復習生成器等知識