您现在的位置是: 网站首页 >Django >Vue+Django REST framework前后端分离生鲜电商 Django
【Vue+DRF生鲜电商】05.商品列表序列化普通方法
admin2019年4月21日 21:41 【Django | Python | Vue 】 1596人已围观
Vue+Django REST framework前后端分离生鲜电商简介 Vue+Django REST framework 打造前后端分离的生鲜电商项目(慕课网视频)。 Github地址:https://github.com/xyliurui/DjangoOnlineFreshSupermarket ; Django版本:2.2、djangorestframework:3.9.2。 前端Vue模板可以直接联系我拿。
## 普通视图序列化 ### JSONView 访问 https://github.com/gildas-lormeau/JSONView-for-Chrome 下载 选择插件目录 JSONView-for-Chrome-master\WebContent ![BLOG_20190421_214417_38](/media/blog/images/2019/04/BLOG_20190421_214417_38.png "博客图集BLOG_20190421_214417_38.png") ### View实现商品列表-json 在goods应用下创建 views_base.py 文件,增加一下内容 ```python 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 = list() all_goods = Goods.objects.all()[:5] print(all_goods) for goods in all_goods: json_dict = dict() json_dict['name'] = goods.name json_dict['category'] = goods.category.name json_dict['shop_price'] = goods.shop_price json_list.append(json_dict) from django.http import HttpResponse import json return HttpResponse(json.dumps(json_list), content_type='application/json') ``` 修改项目配置文件夹的主 urls.py ,增加该视图的url ```python from goods.views_base import GoodsListView urlpatterns = [ path('admin/', admin.site.urls), path('api-auth/', include('rest_framework.urls')), path('ckeditor/', include('ckeditor_uploader.urls')), # 配置富文本编辑器url path('goods/', GoodsListView.as_view(), name='goods_list') ] ``` 访问 http://127.0.0.1:8000/goods/ ![BLOG_20190421_214359_24](/media/blog/images/2019/04/BLOG_20190421_214359_24.png "博客图集BLOG_20190421_214359_24.png") 但这种方式需要将每个字段加到json中去,如果遇到`DateTimeField`字段,是不能序列化的。 ### View实现商品列表-model_to_dict 解决字段多的情况,在我们的模型中,如果字段多,像上面的方法,是非常麻烦的。 ```python 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 = list() all_goods = Goods.objects.all()[:5] # print(all_goods) # for goods in all_goods: # json_dict = dict() # json_dict['name'] = goods.name # json_dict['category'] = goods.category.name # json_dict['shop_price'] = goods.shop_price # json_list.append(json_dict) from django.forms.models import model_to_dict for goods in all_goods: json_dict = model_to_dict(instance=goods) json_list.append(json_dict) from django.http import HttpResponse import json return HttpResponse(json.dumps(json_list), content_type='application/json') ``` 以上方式虽然能获取所有字段,但对于`ImageField`和`DateTimeField`仍然是不支持的 ### 实现商品列表-serializers ```python class GoodsListView(View): def get(self, request): """ 通过Django的View获取商品列表页 :param request: :return: """ json_list = list() all_goods = Goods.objects.all()[:5] # print(all_goods) # for goods in all_goods: # json_dict = dict() # json_dict['name'] = goods.name # json_dict['category'] = goods.category.name # json_dict['shop_price'] = goods.shop_price # json_list.append(json_dict) # from django.forms.models import model_to_dict # for goods in all_goods: # json_dict = model_to_dict(instance=goods) # json_list.append(json_dict) from django.core import serializers json_data = serializers.serialize('json', all_goods) from django.http import HttpResponse, JsonResponse import json return HttpResponse(json_data, content_type='application/json') ``` ![BLOG_20190421_214339_30](/media/blog/images/2019/04/BLOG_20190421_214339_30.png "博客图集BLOG_20190421_214339_30.png") 再使用`JsonResponse` ```python class GoodsListView(View): def get(self, request): """ 通过Django的View获取商品列表页 :param request: :return: """ json_list = list() all_goods = Goods.objects.all()[:5] # print(all_goods) # for goods in all_goods: # json_dict = dict() # json_dict['name'] = goods.name # json_dict['category'] = goods.category.name # json_dict['shop_price'] = goods.shop_price # json_list.append(json_dict) # from django.forms.models import model_to_dict # for goods in all_goods: # json_dict = model_to_dict(instance=goods) # json_list.append(json_dict) from django.core import serializers json_data = serializers.serialize('json', all_goods) # 序列化 from django.http import HttpResponse, JsonResponse import json # return HttpResponse(json_data, content_type='application/json') json_data = json.loads(json_data) # 转换为数组 return JsonResponse(json_data) ``` 会出现错误:`TypeError: In order to allow non-dict objects to be serialized set the safe parameter to False.` 可以进行如下配置 ```python return JsonResponse(json_data) # 修改为 return JsonResponse(json_data, safe=False) ``` 同样也可以正常显示json数据 ### 使用serializer缺点 ![BLOG_20190421_214316_38](/media/blog/images/2019/04/BLOG_20190421_214316_38.png "博客图集BLOG_20190421_214316_38.png") - 比如图片,这保存的是一个相对路径,必须手动在前面加上 settings.py 中配置的`media` - 字段,序列化顺序固定 - 没有文档功能
很赞哦! (1)
相关文章
文章交流
- emoji
当前用户
未登录,点击 登录专题目录
- 【Vue+DRF生鲜电商】01.课程结构介绍,开发环境搭建
- 【Vue+DRF生鲜电商】02.设置users、goods、trade、user_operation数据库并导入原始数据
- 【Vue+DRF生鲜电商】03.Restful API基础
- 【Vue+DRF生鲜电商】04.Vue项目结构介绍
- 【Vue+DRF生鲜电商】05.商品列表序列化普通方法
- 【Vue+DRF生鲜电商】06.DRF环境配置,使用Serializer类序列化商品列表
- 【Vue+DRF生鲜电商】07.序列化商品分页功能
- 【Vue+DRF生鲜电商】08.ViewSets & Routers显示商品列表
- 【Vue+DRF生鲜电商】09.使用DRF的filter过滤商品列表
- 【Vue+DRF生鲜电商】10.商品分类层级获取,Vue跨域请求商品分类
- 【Vue+DRF生鲜电商】11.Vue展示左侧分类、面包屑、排序、商品列表、分页
- 【Vue+DRF生鲜电商】12.用户登录之DRF Token认证登录原理和使用方法
- 【Vue+DRF生鲜电商】13.JWT用户认证原理配置,Vue登录接口调试
- 【Vue+DRF生鲜电商】14.用户注册发送短信验证码、登录字段验证
- 【Vue+DRF生鲜电商】15.用户注册使用信号量实现密码加密
- 【Vue+DRF生鲜电商】16.Vue中注册、退出功能交互
- 【Vue+DRF生鲜电商】17.DRF实现商品详情及热卖商品接口,Vue中显示商品详情和热卖
- 【Vue+DRF生鲜电商】18.用户收藏、取消收藏商品接口实现
- 【Vue+DRF生鲜电商】19.用户添加、删除收藏权限处理,根据商品id显示收藏,在Vue中实现收藏功能
- 【Vue+DRF生鲜电商】20.使用DRF自动生成文档的功能
- 【Vue+DRF生鲜电商】21.用户中心个人资料的展示,并在Vue中实现个人资料更新
- 【Vue+DRF生鲜电商】22.个人中心显示用户收藏功能,对收藏进行删除
- 【Vue+DRF生鲜电商】23.个人中心用户留言功能
- 【Vue+DRF生鲜电商】24.用户收货地址功能
- 【Vue+DRF生鲜电商】25.商品添加购物车接口功能,Vue和购物车联调
- 【Vue+DRF生鲜电商】26.使用Pycharm远程代码调试服务器Django代码
- 【Vue+DRF生鲜电商】26.订单接口功能,Vue和订单接口联调
- 【Vue+DRF生鲜电商】27.支付宝公钥,私钥,沙箱环境配置
- 【Vue+DRF生鲜电商】28.支付宝支付接口类解读,支付逻辑编辑
- 【Vue+DRF生鲜电商】29.线上服务支付宝接口和Vue联调,Django代理Vue运行
- 【Vue+DRF生鲜电商】30.首页轮播图、新品展示功能
- 【Vue+DRF生鲜电商】31.首页商品按分类显示推荐功能
- 【Vue+DRF生鲜电商】32.商品操作后计数更改,热搜榜关键字功能实现
- 【Vue+DRF生鲜电商】33.数据缓存、接口访问限速功能
- 【Vue+DRF生鲜电商】34.第三方登录(微博、qq和微信)之微博登录登录测试
- 【Vue+DRF生鲜电商】35.使用social-app-django集成第三方登录