1.JsonResponse
class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs)
是HttpResponse的一個子類(有很多的子類),用於幫助創建JSON編碼的響應。他從父類繼承大部分行為,並具有以下的不同點:
它的默認Content-Type頭部設置為application/json。
(1)它的第一個參數 data,應該為一個 dict 實例。如果 safe 參數設置為 False,它可以是任何可 JSON 序列化的對象。
(2)encoder,默認為 django.core.serializers.json.DjangoJSONEncoder,用於序列化data。
(3)布爾參數 safe 默認為 True。如果設置為 False,可以傳遞任何對象進行序列化(否則,只允許 dict 實例)。如果 safe 為 True,而第一個參數傳遞的不是 dict 對象,將拋出一個TypeError。
(4)json_dumps_params 是一個字典,它是在生成響應時,傳給 json.dumps() 的參數。
2.用法
from django.http import JsonResponse response = JsonResponse({'foo': 'bar'}) response.content '{"foo": "bar"}' //<span style="background-color: white; font-family: Helvetica, Tahoma, Arial, sans-serif;">序列化非字典對象</span>
若要序列化非 dict 對象,你必須設置 safe 參數為 False:
response = JsonResponse([1, 2, 3], safe=False)
如果不傳遞safe=False,將拋出一個TypeError。
3.修改默認的JSON 編碼器
如果你需要使用不同的 JSON 編碼器類,你可以傳遞 encoder 參數給構造函數:
response = JsonResponse(data, encoder=MyJSONEncoder)
JsonResponse(book_list,safe=False,json_dumps_params={"ensure_ascii":False})
可以解決編碼問題,得到想輸出的中文了