DRF学习之与Django的视图序列化(四)

1.在goods的app下创建一个views_base页面用来放置django代码,避免与django result framework代码理解混淆
2.如果在view层用django来处理并返回数据

class GoodsListView(View):
    def get(self, request):
        """
        通过django的view实现商品列表页
        :param request:
        :return:
        """
        json_list = []
        goods = Goods.objects.all()[:10]#获取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)#将获取的数据加入到list中
        
        from django.http import JsonResponse
        import json
        return HttpResponse(json.dumps(json_list), content_type='applecation/json')#数据的序列化

需要一个个的获取数据,这会极大的增加我们自己的代码量,而且add_time无法被序列化,序列化时会报错
3.优化:更改提取操作,用此方法减少数据提取的代码量

        from django.forms.models import model_to_dict
        for good in goods:
            json_dict = model_to_dict(good)#轻松的完成数据的提取
            json_list.append(json_dict)

注:
1. json.loads与json.dumps是相反的操作,会将数据变为dict
2.HttpResopnse应传递一个json序列化的数据,传dict是不可以的,所以需要json.dumps(json序列化)一下
3.JsonResponsed的函数对数据进行了content_type='applecation/json’转换和json.dumps操作

4.返回数据的三种方式,一般用第一种方式

1.
        import json
        from django.core import serializers
        json_data = serializers.serialize('json', goods)#数据的序列化
        json_data = json.loads(json_data)
        from django.http import JsonResponse
        return JsonResponse(json_data, safe=False)
	
2.
        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.dumps(json_data),  content_type='applecation/json')

3.
        from django.core import serializers
        json_data = serializers.serialize('json', goods)#数据的序列化
        from django.http import HttpResponse
        return HttpResponse(json_data,  content_type='applecation/json')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值