整體的思路就是通過Django API獲取虛擬機信息,如果不存在就通過API去訪問獲取。
站在用戶的角度思考問題,與客戶深入溝通,找到金東網(wǎng)站設(shè)計與金東網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、虛擬空間、企業(yè)郵箱。業(yè)務覆蓋金東地區(qū)。
這個問題看起來比較奇怪,按照錯誤的思路,應該是在exception的異常捕獲部門來處理,這么做確實是可以的,但是如果要擴展邏輯,異常處理的邏輯就會越來越重,感覺怪怪的。
所以反復測試,也算是明白了,使用get的方式去獲取數(shù)據(jù),如果獲取不到就會拋錯,個人感覺這個接口還是不太友好,可以換一種方式,比如filter來實現(xiàn),因為從表結(jié)構(gòu)能夠定位到這是一個主鍵或者唯一性索引。
所以代碼的部分根據(jù)count的方式來做了調(diào)整,然后在這個基礎(chǔ)上又做了改進,即如果在本地的數(shù)據(jù)庫中不存在,則訪問接口得到數(shù)據(jù)庫,把數(shù)據(jù)庫下沉到本地,整個過程對于我們使用是透明的,也算是一種比較友好的交互方式。
vm_info_dict_exists = virtual_machine_info.objects.filter(ip=vm_ip_addr).count() if vm_info_dict_exists >= 1: vm_info_dict = virtual_machine_info.objects.get(ip=vm_ip_addr) print(vm_info_dict) physical_server_ip = vm_info_dict.hostip device_info_dict = physical_server_info.objects.get(ip=physical_server_ip) phy_contain_vms = virtual_machine_info.objects.filter(hostip=physical_server_ip) return_dict["device_info_dict"] = device_info_dict return_dict["vm_info_dict"] = vm_info_dict return_dict["phy_contain_vms"] = phy_contain_vms else: token = gettoken('xxxx', 'xxxxxx') vm_info_dict = getresponse('https://xxxxxx/API/v1/GetServerInfo/' + vm_ip_addr, token) physical_server_ip = vm_info_dict.get("hostip") print(physical_server_ip) device_info_dict = getresponse('https://xxxxxxxAPI/v1/GetDeviceInfo/' + physical_server_ip, token) return_dict["device_info_dict"] = device_info_dict return_dict["vm_info_dict"] = vm_info_dict vm_info = virtual_machine_info() ...... vm_info.memo = vm_info_dict.get("memo") vm_info.save() phy_exists = physical_server_info.objects.filter(ip=vm_info.hostip).count() if phy_exists == 0: phy_info = physical_server_info() phy_exists = physical_server_info.objects.filter(ip=vm_info.hostip).count() if phy_exists == 0: phy_info = physical_server_info() phy_info.update_date = device_info_dict.get("update_date") ...... phy_info.memo = device_info_dict.get("memo") phy_info.save() phy_contain_vms = virtual_machine_info.objects.filter(hostip=vm_info.hostip) return_dict["phy_contain_vms"] = phy_contain_vms
后續(xù)準備對這些信息做更進一步的改進,能夠?qū)崿F(xiàn)元數(shù)據(jù)的增量刷新,即數(shù)據(jù)發(fā)生變化的時候我會調(diào)用接口刷新數(shù)據(jù)到本地,否則還是保持不變。