5-2 django的serializer序列化model

 

简单快速序列化

C:\Users\huang\PycharmProjects\MxShop\apps\goods\views_base.py

from django.views.generic.base import View
# from django.views.generic import ListView


from goods.models import Goods


class GoodsListView(View):
    def get(self, request):
        """
        通过django的view实现商品列表页
        :param request:
        :return:
        """
        json_list = []
        goods = Goods.objects.all()[:10]
        # for good in goods:
        #     json_dict = {}
        #     json_dict["name"] = good.name
        #     json_dict["category"] = good.category.name
        #     json_dict["market_price"] = good.market_price
        #     # json_dict["add_time"] = good.add_time
        #     json_list.append(json_dict)

        from django.forms.models import model_to_dict
        for good in goods:
            json_dict = model_to_dict(good)
            json_list.append(json_dict)


        from django.http import HttpResponse
        import json
        return HttpResponse(json.dumps(json_list), content_type="application/json")

 

效果:

 

TypeError at /goods/
Object of type 'ImageFieldFile' is not JSON serializable
Request Method:	GET
Request URL:	http://127.0.0.1:8000/goods/
Django Version:	1.11
Exception Type:	TypeError
Exception Value:	
Object of type 'ImageFieldFile' is not JSON serializable
Exception Location:	C:\Users\huang\AppData\Local\Programs\Python\Python36\lib\json\encoder.py in default, line 180
Python Executable:	D:\Envs\MxShop\Scripts\python.exe
Python Version:	3.6.0
Python Path:	
['C:\\Users\\huang\\PycharmProjects\\MxShop\\extra_apps',
 'C:\\Users\\huang\\PycharmProjects\\MxShop\\apps',
 'C:\\Users\\huang\\PycharmProjects\\MxShop',
 'C:\\Users\\huang\\PycharmProjects\\MxShop',
 'C:\\Program Files\\JetBrains\\PyCharm 2018.2.4\\helpers\\pydev',
 'C:\\Users\\huang\\PycharmProjects\\MxShop',
 'C:\\Users\\huang\\PycharmProjects\\MxShop\\apps',
 'C:\\Users\\huang\\PycharmProjects\\MxShop\\extra_apps',
 'C:\\Program Files\\JetBrains\\PyCharm 2018.2.4\\helpers\\pydev',
 'C:\\Users\\huang\\.PyCharm2018.2\\system\\cythonExtensions',
 'D:\\Envs\\MxShop\\Scripts\\python36.zip',
 'C:\\Users\\huang\\AppData\\Local\\Programs\\Python\\Python36\\DLLs',
 'C:\\Users\\huang\\AppData\\Local\\Programs\\Python\\Python36\\lib',
 'C:\\Users\\huang\\AppData\\Local\\Programs\\Python\\Python36',
 'D:\\Envs\\MxShop',
 'D:\\Envs\\MxShop\\lib\\site-packages',
 'D:\\Envs\\MxShop\\lib\\site-packages\\setuptools-39.1.0-py3.6.egg',
 'C:\\Program Files\\JetBrains\\PyCharm '
 '2018.2.4\\helpers\\pycharm_matplotlib_backend']
Server time:	星期二, 23 四月 2019 17:38:48 +0800

 

快捷键设置

 

改进

from django.views.generic.base import View
# from django.views.generic import ListView


from goods.models import Goods


class GoodsListView(View):
    def get(self, request):
        """
        通过django的view实现商品列表页
        :param request:
        :return:
        """
        json_list = []
        goods = Goods.objects.all()[:10]
        # for good in goods:
        #     json_dict = {}
        #     json_dict["name"] = good.name
        #     json_dict["category"] = good.category.name
        #     json_dict["market_price"] = good.market_price
        #     # json_dict["add_time"] = good.add_time
        #     json_list.append(json_dict)

        # from django.forms.models import model_to_dict
        # for good in goods:
        #     json_dict = model_to_dict(good)
        #     json_list.append(json_dict)

        import json
        from django.core import serializers
        json_data = serializers.serialize("json", goods)
        json_data = json.loads(json_data)

        from django.http import HttpResponse
        return HttpResponse(json_data, content_type="application/json")

 

再改进

 

from django.views.generic.base import View
# from django.views.generic import ListView


from goods.models import Goods


class GoodsListView(View):
    def get(self, request):
        """
        通过django的view实现商品列表页
        :param request:
        :return:
        """
        json_list = []
        goods = Goods.objects.all()[:10]
        # for good in goods:
        #     json_dict = {}
        #     json_dict["name"] = good.name
        #     json_dict["category"] = good.category.name
        #     json_dict["market_price"] = good.market_price
        #     # json_dict["add_time"] = good.add_time
        #     json_list.append(json_dict)

        # from django.forms.models import model_to_dict
        # for good in goods:
        #     json_dict = model_to_dict(good)
        #     json_list.append(json_dict)

        import json
        from django.core import serializers
        json_data = serializers.serialize("json", goods)
        json_data = json.loads(json_data)

        from django.http import HttpResponse, JsonResponse
        return JsonResponse(json_data)

启动访问:

http://127.0.0.1:8000/goods/

TypeError at /goods/
In order to allow non-dict objects to be serialized set the safe parameter to False.
Request Method:	GET
Request URL:	http://127.0.0.1:8000/goods/
Django Version:	1.11
Exception Type:	TypeError
Exception Value:	
In order to allow non-dict objects to be serialized set the safe parameter to False.
Exception Location:	D:\Envs\MxShop\lib\site-packages\django\http\response.py in __init__, line 524
Python Executable:	D:\Envs\MxShop\Scripts\python.exe
Python Version:	3.6.0
Python Path:	
['C:\\Users\\huang\\PycharmProjects\\MxShop\\extra_apps',
 'C:\\Users\\huang\\PycharmProjects\\MxShop\\apps',
 'C:\\Users\\huang\\PycharmProjects\\MxShop',
 'C:\\Users\\huang\\PycharmProjects\\MxShop',
 'C:\\Program Files\\JetBrains\\PyCharm 2018.2.4\\helpers\\pydev',
 'C:\\Users\\huang\\PycharmProjects\\MxShop',
 'C:\\Users\\huang\\PycharmProjects\\MxShop\\apps',
 'C:\\Users\\huang\\PycharmProjects\\MxShop\\extra_apps',
 'C:\\Program Files\\JetBrains\\PyCharm 2018.2.4\\helpers\\pydev',
 'C:\\Users\\huang\\.PyCharm2018.2\\system\\cythonExtensions',
 'D:\\Envs\\MxShop\\Scripts\\python36.zip',
 'C:\\Users\\huang\\AppData\\Local\\Programs\\Python\\Python36\\DLLs',
 'C:\\Users\\huang\\AppData\\Local\\Programs\\Python\\Python36\\lib',
 'C:\\Users\\huang\\AppData\\Local\\Programs\\Python\\Python36',
 'D:\\Envs\\MxShop',
 'D:\\Envs\\MxShop\\lib\\site-packages',
 'D:\\Envs\\MxShop\\lib\\site-packages\\setuptools-39.1.0-py3.6.egg',
 'C:\\Program Files\\JetBrains\\PyCharm '
 '2018.2.4\\helpers\\pycharm_matplotlib_backend']
Server time:	星期二, 23 四月 2019 18:14:44 +0800

用火狐浏览器 加载jsonview组件 效果

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值