最近又打算搞自動化維運平台,所以在看Django的知識。
在實際專案開發中,遇到一個小問題:前後端發生資料互動主流採用的是JSON。前端傳資料到伺服器端比較簡單,稍微麻煩的是伺服器端傳JSON到前端。
首先資料是從資料庫取得的,而Django預設使用的是ORM技術,但是身為一個維運人員,我其實比較反感這類抽像出來的API。因為儘管它對於開發人員來說,將資料庫的表抽像成了一個對象,便於開發,不需要寫SQL語句,但是這也是後期程序造成性能瓶頸的罪魁禍首(再做一次故障處理時,遇到一條70幾行的SQL語句。
不管怎麼說,這次的主題是將從資料庫取得資料轉換成JSON,下面會用ORM和SQL兩種方式都拿出來分享。
1.採用Django Model層,ORM技術 轉換成JSON格式
1 def getdata(request):2 # 使用ORM3 # all()返回的是QuerySet 数据类型;values()返回的是ValuesQuerySet 数据类型4 data = models.VM.objects.values('id', 'ip', 'host', 'username')5 data = serializers.serialize("json", tomcats)6 return JsonResponse(list(data), safe=False)
2.完全棄用Django Model層,純SQL 轉換成JSON格式
1 def getdata(request):2 # 使用SQL3 with connection.cursor() as cursor:4 cursor.execute('select id, machine, tomcathome, ipaddress, description from tomcatData')5 data = dictfetchall(cursor)6 return JsonResponse(data, safe=False, json_dumps_params={'ensure_ascii': False})
JsonResponse 物件:
class <span class="highlighted">JsonResponse</span>
(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None,** kwargs)
這個類別是HttpRespon的子類,它主要和父類別的區別在於:
1.它的預設Content-Type 被設定為: application/json
2.第一個參數,data應該是一個字典類型,當safe 這個參數被設定為:False ,那data可以填入任何能被轉換為JSON格式的對象,例如list, tuple, set。 預設的safe 參數是 True. 如果你傳入的data資料型別不是字典型,那麼它就會拋出 TypeError的例外。
3.json_dumps_params參數是一個字典,它將呼叫json.dumps()方法並將字典中的參數傳入給該方法。
透過以上的解釋,上面兩個方法的JsonResponse()裡面傳入的參數就很清晰明了。
這樣資料就會以JSON格式傳入到前端,前端就能用AJAX獲取到,並進行處理或展示了。
以上是資料庫資料轉換成JSON格式實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了版本3.10中介紹的Python的新“匹配”語句,該語句與其他語言相同。它增強了代碼的可讀性,並為傳統的if-elif-el提供了性能優勢

Python中的功能註釋將元數據添加到函數中,以進行類型檢查,文檔和IDE支持。它們增強了代碼的可讀性,維護,並且在API開發,數據科學和圖書館創建中至關重要。

本文討論了Python中的單位測試,其好處以及如何有效編寫它們。它突出顯示了諸如UNITSEST和PYTEST之類的工具進行測試。

文章討論了Python的\ _ \ _ Init \ _ \ _()方法和Self在初始化對象屬性中的作用。還涵蓋了其他類方法和繼承對\ _ \ _ Init \ _ \ _()的影響。

本文討論了python中@classmethod,@staticmethod和實例方法之間的差異,詳細介紹了它們的屬性,用例和好處。它說明瞭如何根據所需功能選擇正確的方法類型和DA

Inpython,YouAppendElementStoAlistusingTheAppend()方法。 1)useappend()forsingleelements:my_list.append(4).2)useextend()orextend()或= formultiplelements:my_list.extend.extend(emote_list)ormy_list = [4,5,6] .3)useInsert()forspefificpositions:my_list.insert(1,5).beaware


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。