python測試開發django-16.JsonResponse返回中文編碼問題


前言

django查詢到的結果,用JsonResponse返回在頁面上顯示類似於\u4e2d\u6587 ,注意這個不叫亂碼,這個是unicode編碼,python3默認返回的編碼

遇到問題

接着前面的User表,測試數據如下

user_name psw mail
yoyo 123456 283340479@qq.com
yoyo2 111111 1
yoyo5 111111 0

接着上一篇【python測試開發django-15.查詢結果轉json(serializers)】,如果數據庫里面有中文的數據,
返回的json數據中文不能正常顯示如下,查詢的結果中有{"user_name": "\u4e0a\u6d77-\u60a0\u60a0", "psw": "\u5bc6\u7801", "mail": "\u4e2d\u6587"}

{
	"data": [{
		"user_name": "yoyo",
		"psw": "123456",
		"mail": "283340479@qq.com"
	}, {
		"user_name": "yoyo2",
		"psw": "111111",
		"mail": "1"
	}, {
		"user_name": "yoyo5",
		"psw": "111111",
		"mail": "0"
	}, {
		"user_name": "\u4e0a\u6d77-\u60a0\u60a0",
		"psw": "\u5bc6\u7801",
		"mail": "\u4e2d\u6587"
	}]
}

解決辦法

JsonResponse里面有個參數json_dumps_params,設置為json_dumps_params={'ensure_ascii':False}即可

class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs)  

  data: 應該傳遞一個標准的 python 字典給它,它將其轉換成 json 格式的數據。

  encoder:默認為 django.core.serializers.json.DjangoJSONEncoder,用於序列化data。關於這個序列化的更多信息參見JSON 序列化。

  safe : 默認為True。如果設置為False,可以傳遞任何對象進行序列化(否則,只允許dict 實例)。如果safe 為True,而第一個參數傳遞的不是dict 對象,將拋出一個TypeError。

另外:它的默認 Content-Type 頭部設置為application/json。

  json_dumps_params:在1.9版本中新增,可以傳遞一個python標准的 json 庫中,json.dump() 方法處理后的對象給它,用於生成一個響應。

修改后代碼(上一篇的三種方法都適用)

def json_data(request):
    '''values()獲取的可迭代dict對象轉list'''
    data = {}
    ret = User.objects.all().values()
    data["data"] = list(ret)
    return JsonResponse(data,
                        safe=False,
                        json_dumps_params={'ensure_ascii':False})

在urls.py配置訪問地址 url(r'^json_data$', testdb.json_data,訪問后得到的結果(返回的數據自己在線解析過)

{
	"data": [{
		"user_name": "yoyo",
		"psw": "123456",
		"mail": "283340479@qq.com"
	}, {
		"user_name": "yoyo2",
		"psw": "111111",
		"mail": "1"
	}, {
		"user_name": "yoyo5",
		"psw": "111111",
		"mail": "0"
	}, {
		"user_name": "上海-悠悠",
		"psw": "密碼",
		"mail": "中文"
	}]
}

django交流QQ群:779429633


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM