1. 程式人生 > >說說HTTPResponse與JsonResponse,Response的區別

說說HTTPResponse與JsonResponse,Response的區別

1.HTTPResponse是由Django建立的,他的返回格式為HTTPResponse(content=響應體, content_type=響應體資料型別, status=狀態碼),可以修改返回的資料型別,適用於返回圖片,視訊,音訊等二進位制檔案

2.JsonReponse是HTTPResponse的子類,適用於處理json格式的資料,但是不能返回模板。

幫助我們將資料轉換為json字串

設定響應頭Content-Type為application/json

3.Response是Django-rest Framework框架中封裝好的響應物件,他的返回格式為Response(data, status=None, template_name=None, headers=None, content_type=None),

data只需傳遞python的內建型別資料即可,如果是Django的模型類物件,那麼就使用序列化將資料(python的字典資料)傳遞給data。

from django.views import View
from .models import Goods
from django.http.response import HttpResponse,JsonResponse
from django.core import serializers

#django 的View
#新增加django 的序列化器

class GoodsListDjangoSerializerView (View):

    #重寫get方法
    def get(self,request):

        self.x = print("request==", request)
        goods_list = Goods.objects.all()
        print("goods_list==",goods_list)

        #使用了django的序列化 --工具類 序列化器

        #字串,轉換成json資料
        data = serializers.serialize("json",goods_list)
        print("data type",type(data))

        #第一方式返回
        #返回資料,Content-Type: application/json,告訴瀏覽器,json資料
        # return HttpResponse(data,"application/json")

        import json
        # #把字串轉換列表或者字典
        data = json.loads(data)
        # #第二種方式返回
        # #safe=False,
        #
        return JsonResponse(data,safe=False,)

from django.conf.urls import url
from myshop.settings import MEDIA_ROOT
from django.views.static import serve
from goods.view_django_view import GoodsListDjangoView
from goods.view_django_serializer_view import GoodsListDjangoSerializerView
# from django.contrib import admin
import xadmin

urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^xadmin/', xadmin.site.urls),
    # 配置xadmin後臺能顯示圖片的路徑
    url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}),
    url(r'^goods1/',GoodsListDjangoView.as_view(),name='goods1'),
    url(r'^goods2/',GoodsListDjangoSerializerView.as_view(),name='goods2'),

]