前言
django查詢結果返回的都是可迭代的queryset序列,如果不太習慣這種數據的話,可以用serializers方法轉成json數據,更直觀,返回json數據需要用到JsonResponse ,django 查詢數據庫返回json數據有3種方法“:
serializers轉json
model_to_dict轉字典
values轉list (最簡單推薦此種方法)
JsonRespoonse
json是常見的數據交換格式,有時需要返回一個json格式的數據,而JsonResponse提供了一個快捷的方法。
屬於HttpResponse的一個子類,用來幫助用戶創建Json編碼的響應。下面我們學習一下JsonResponse構造函數:
data:應該傳遞一個標准的跑一趟紅字典給它,將其轉換成json數據。
encoder:默認為django.core.serializers.json.DjangoJSONEncoder,用於序列化data,更多信息參見JSON序列化。
safe:默認為True,如果設置為False,可以傳遞任何對象進行序列化(否則,只允許dict實例)。
另外:默認Content-Type 頭部設置為applicatyion-json
json_dumps_params:在1.9版本中新增,可以傳遞python標准的json庫中,json.dump()方法處理后生成一個響應。
用法:
views.py文件導入JsonResponse,創建視圖函數
urls.py文件路徑添加訪問路徑
終端啟動django服務:python manage.py runserver 0.0.0.0:8000
打開瀏覽器訪問
serializers轉json
django里有個serializers方法可以直接把查詢的結果轉成json數據
先導入serializers方法
from django.core import serializers
import json
配置urls.py 訪問路徑
返回的結果如下:
{"result": [{"model": "ke24.user", "pk": "liushui", "fields": {"psw": "123456", "mail": "123456@163.com"}}, {"model": "ke24.user", "pk": "liushui0", "fields": {"psw": "12345", "mail": "123@qq.com"}}, {"model": "ke24.user", "pk": "liushui1", "fields": {"psw": "123", "mail": "123456@qq.com"}}, {"model": "ke24.user", "pk": "liushui11", "fields": {"psw": "123456", "mail": "897564"}}]}
model_to_dict 轉字典
上面的方法雖然可以轉換成json數據,但是上面返回的結果里面有一些多余的字段modle和pk,不需要。
介紹一下第二種方法使用model_to_dict方法把查詢的queryset尋列結果轉成字典序列
配置urls.py 訪問路徑
瀏覽器返回結果如下:
[{"user_name": "liushui", "psw": "123456", "mail": "123456@163.com"}, {"user_name": "liushui0", "psw": "12345", "mail": "123@qq.com"}, {"user_name": "liushui1", "psw": "123", "mail": "123456@qq.com"}, {"user_name": "liushui11", "psw": "123456", "mail": "897564"}]
values() 轉list
這種方法不需要導入方法,使用values方法獲取一個可迭代的dict序列,在使用list函數轉成list對象
獲得的返回數據如下:
{"data": [{"user_name": "liushui", "psw": "123456", "mail": "123456@163.com"}, {"user_name": "liushui0", "psw": "12345", "mail": "123@qq.com"}, {"user_name": "liushui1", "psw": "123", "mail": "123456@qq.com"}, {"user_name": "liushui11", "psw": "123456", "mail": "897564"}]}
{"result": [{"model": "ke24.user", "pk": "liushui", "fields": {"psw": "123456", "mail": "123456@163.com"}}, {"model": "ke24.user", "pk": "liushui0", "fields": {"psw": "12345", "mail": "123@qq.com"}}, {"model": "ke24.user", "pk": "liushui1", "fields": {"psw": "123", "mail": "123456@qq.com"}}, {"model": "ke24.user", "pk": "liushui11", "fields": {"psw": "123456", "mail": "897564"}}]}