Djnago中,HttpResponse 和JsonResponse,返回后直接取值
1.返回字符串
正常使用HttpResponse返回字符串就好
2.視圖函數響應JSON數據類型:
- 使用HttpResponse響應手動序列化后JSON數據直接響應,前端得到的響應數據需要被動反序列化成對應的數據類型
- 使用HttpResponse響應手動序列化后JSON數據並設置參數content_type='application/json'前端得到的響應數據是經過JSON對象自動進行反序列化后的對應數據類型
- 使用HttpResponse響應不需要手動序列化JSON數據,直接響應即可,但是對於非字典類型的數據類型需要設置參數safe=False,前端得到的響應數據是經過JSON對象自動進行反序列化后的對應數據類型
①使用HttpResponse響應:未告知類型,前端需要被動解析
視圖函數:
data={'status':[1,2,3],'info':'login'}
return HttpResponse(json.dumps(data))#直接發送json字典,前端需要被動反序列化
AJAX回調函數:
success: function (response) {//請求回調函數參數response被動反序列化
console.log(JSON.parse(response));
console.log(typeof JSON.parse(response));
②使用HttpResponse響應,告知類型,前段自動調用JSON對象解析
視圖函數:
data={'status':[1,2,3],'info':'login'}
return HttpResponse(json.dumps(data),content_type='application/json')#發送json字典,告知類型
return HttpResponse(json.dumps(ret,ensure_ascii=False)) #ensure_ascii=False是告訴json不要對中文進行編碼,不然返回給前端的數據中如果有中文的話會被編碼成unicode類型的數據,導致前端看不到中文
AJAX回調函數:
success: function (response) {//請求回調函數參數response自動反序列化
console.log(response);
console.log(typeof response);
③使用JsonResponse響應,不需要手動進行序列化,同時也不需要告知類型,在響應除字典以外的數據類型時,需要添加參數safe=False
from django.http import JsonResponse
響應字典視圖函數:
data={'status':[1,2,3],'info':'login'}
return JsonResponse(data)#使用JsonResponse,直接響應數據
響應非字典視圖函數:
data=[{'status':[1,2,3],'info':'login'}]
return JsonResponse(data,safe=False)#使用JsonResponse,直接相應數據,字典以外數據類型徐設置參數safe=False
AJAX回調函數:
success: function (response) {//請求回調函數參數response自動反序列化
console.log(response);
console.log(typeof response);