1. 程式人生 > >pythonBug記錄:django將資料庫資料轉換成JSON格式

pythonBug記錄:django將資料庫資料轉換成JSON格式

1.採用Django Model層,ORM技術 轉換成JSON格式

def getdata(request):
   # 使用ORM
   # all()返回的是QuerySet 資料型別;values()返回的是ValuesQuerySet 資料型別
    ret = models.incomeAccount.objects.all().order_by("dayIncome","id")
 	ret = serialize("json",ret)
	print(ret)
	return render(request,'admin_chartIncome.html',{"ret": json.dumps(ret)})

2.完全棄用Django Model層,純SQL 轉換成JSON格式

def getdata(request):
# 使用SQL
    with connection.cursor() as cursor:
        cursor.execute('select id, dayTime, bath from incomeAccount')
        data = dictfetchall(cursor)
    return JsonResponse(data, safe=False, json_dumps_params={'ensure_ascii': False})
# 將返回結果轉換成字典
def dictfetchall(cursor):
    "Return all rows from a cursor as a dict"
    columns = [col[0] for col in cursor.description]
    return [
        dict(zip(columns, row))
        for row in cursor.fetchall()
    ]

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獲取到,並進行處理或者展示了