django-將數據庫數據轉換成JSON格式(ORM和SQL兩種情況)
最近打算搞一個自動化運維平臺,所以在看Django的知識。
在實際項目開發中,遇到一個小問題:前後端發生數據交互主流采用的是JSON。前端傳數據到服務器端比較簡單,稍微麻煩的是服務器端傳JSON到前端。
首先數據是從數據庫中獲取的,Django默認使用的是ORM技術,但是作為一個運維人員,我其實比較反感這類抽象出來的API。因為盡管它對於開發人員來說,將數據庫的表抽象成了一個對象,便於開發,不需要寫SQL語句,但是這也是後期程序造成性能瓶頸的罪魁禍首(再做一次故障處理時,遇到一條70幾行的SQL語句。。。。。),另外對於一個運維人員來說,純SQL是基本能力,再次去學習ORM的語法,無形中又增加了學習成本。
不管怎麽說,這次的主題是將從數據庫獲取數據轉換成JSON,下面會將用ORM和SQL兩種方式都拿出來分享。
1.采用Django Model層,ORM技術 轉換成JSON格式
1 def getdata(request): 2 # 使用ORM 3 # 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 # 使用SQL 3 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 JsonResponse
(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獲取到,並進行處理或者展示了。
django-將數據庫數據轉換成JSON格式(ORM和SQL兩種情況)