django實現HttpResponse返回json數據為中文
Python3讀取寫入json的中文亂碼問題
之前我用django一般用JsonResponse來返回json數據格式
但是發現返回中文的時候會亂碼
from django.http import JsonResponsedef test(request): result = {'result': 0, 'msg': '執行成功'} return return JsonResponse(result)
這種方式返回簡單,但是中文會亂碼
現在改成用HttpResponse來返回,顯示中文成功
from django.http import HttpResponseimport jsondef test(request): result = {'result': 0, 'msg': '執行成功'} #json返回為中文 return HttpResponse(json.dumps(result,ensure_ascii=False),content_type='application/json,charset=utf-8')
補充知識:Django中的HttpResponse和JsonResponse
我們在編寫一些接口函數的時候,經常需要給調用者返回json格式的數據,那么如何返回可直接解析的數據呢?
首先第一種方式:
from django.shortcuts import renderfrom django.http import HttpResponse,JsonResponseimport json# Create your views here.def index(request): data={ ’name’:’zhangsan’, ’age’:18, } return HttpResponse(json.dumps(data))
這里前臺的返回信息中,返回的Content-Type:是text/html,也就是字符串類型的返回,所以這段返回值并不是一個標準的json數據,是一個長得像json數據的字符串,當然可以通過工具直接轉換為json,不過既然是一個json的接口,那么我們拋出的數據自然是json格式的最好,那如何拋出標準json格式的數據呢?
稍稍修改一丟丟代碼,在HttpResponse中添加content_type類型為json的屬性
from django.shortcuts import renderfrom django.http import HttpResponse,JsonResponseimport json# Create your views here.def index(request): data={ ’name’:’zhangsan’, ’age’:18, } return HttpResponse(json.dumps(data),content_type='application/json')
現在返回的就是application/json了;
那么Django提供了更方便的方法那就是JsonResponse,它內置幫我們封裝了這個轉換的操作,也就是說我們的接口拋json數據的話那么將HttpResponse替換為JsonResponse就OK了
1.首先先傳dict數據:
from django.shortcuts import renderfrom django.http import HttpResponse,JsonResponse# Create your views here.def index(request): data={ ’name’:’zhangsan’, ’age’:18, } return JsonResponse(data)
成功收到json數據;
2.接著再試試list數據:
from django.shortcuts import renderfrom django.http import HttpResponse,JsonResponse# Create your views here.def index(request): listdata=[1,2,3,4,5] return JsonResponse(listdata)
此時查看輸出,卻報錯了:
In order to allow non-dict objects to be serialized set the safe parameter to False.
所以我們如果需要將非dict類型的數據進行JsonResponse傳值,需要將safe參數設置為False
from django.shortcuts import renderfrom django.http import HttpResponse,JsonResponse# Create your views here.def index(request): listdata=[1,2,3,4,5] return JsonResponse(listdata,safe=False)
此時成功接收到數據。
3.如果我們需要使用JsonResponse傳中文
def func(request): data={’姓名’:’釋明空’} return JsonResponse(data,json_dumps_params={’ensure_ascii’:False})
此時需要添加’json_dumps_params={‘ensure_ascii’:False}’,因為json序列化中文用的是ascii編碼,所以傳到前臺的中文是ascii字符碼,需要這一步轉化為中文。
以上這篇django實現HttpResponse返回json數據為中文就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。
相關文章:
1. ASP中常用的22個FSO文件操作函數整理2. 無線標記語言(WML)基礎之WMLScript 基礎第1/2頁3. ASP調用WebService轉化成JSON數據,附json.min.asp4. .Net core 的熱插拔機制的深入探索及卸載問題求救指南5. SharePoint Server 2019新特性介紹6. html清除浮動的6種方法示例7. 讀大數據量的XML文件的讀取問題8. ASP.NET Core 5.0中的Host.CreateDefaultBuilder執行過程解析9. React+umi+typeScript創建項目的過程10. Vue+elementUI下拉框自定義顏色選擇器方式
