在返回json对象的几种方式:

1

from django.shortcuts import render, HttpResponse# Create your views here.
from django.views import View
from app01 import models
import json
class BookListView(View):"""使用json进行json序列化"""def get(self, request):"""以json形式返回书籍的列表"""# 1. 获取所有的书籍对象# models.Book.objects.all() queryset 类型的对象,不能直接jsonqueryset = models.Book.objects.all().values('id', 'title', )# 2. 将数据序列化成json格式   date类型的数据不能直接系列化 ensure_ascii=False 修改乱码的现象ret = json.dumps(list(queryset), ensure_ascii=False)# 3. 返回return HttpResponse(ret)

2 使用JsonResponse返回数据。实现简单的序列化

from django.http.response import JsonResponseclass BookListView(View):"""使用JsonResponse进行json序列化"""def get(self, request):"""以json形式返回书籍的列表"""# 1. 获取所有的书籍对象queryset = models.Book.objects.all()     ret = []for book in queryset:tmp = {}tmp['id'] = book.pktmp['title'] = book.titletmp['pub_date'] = book.pub_date # 时间类型的有问题,这里没有修改tmp['publisher'] = book.publisher_idtmp['authors'] = [i.pk for i in book.authors.all()]ret.append(tmp)print(ret)return JsonResponse(list(queryset), safe=False, json_dumps_params={'ensure_ascii': False})

3 用django内置的进行json序列化

from django.core import serializers
class BookListView(View):"""使用django内置的进行json序列化"""def get(self, request):"""以json形式返回书籍的列表"""# 1. 获取所有的书籍对象queryset = models.Book.objects.all()# 2. 将数据序列化成json格式data = serializers.serialize('json', queryset=queryset)# 3. 返回return HttpResponse(data)

4使用djangorestful进行json序列化

class BookSerializer(serializers.Serializer):id = serializers.IntegerField(required=False)title = serializers.CharField()pub_date = serializers.DateField()#python -m pip install djangorestframework
# 在setting.py中 将rest_framework 写下 INSTALLED_APPS列表中
from rest_framework.views import APIView
from rest_framework.response import Responseclass BookListView(APIView):"""使用djangorestful进行json序列化"""def get(self, request):"""以json形式返回书籍的列表"""# 1. 获取所有的书籍对象queryset = models.Book.objects.all()# 2. 将数据序列化成json格式,many=True将数据一个一个的循环ser_obj = BookSerializer(queryset, many=True)# 3. 返回return Response(ser_obj.data)

5 使用serializers.ModelSerializer返回

class BookModelSerializer(serializers.ModelSerializer):# 自定义数据库不存在的字段category_info = serializers.SerializerMethodField()  # 找  get_字段名的方法 执行publisher_info = serializers.SerializerMethodField()author_info = serializers.SerializerMethodField()def get_category_info(self, obj):return obj.get_category_display()def get_publisher_info(self, obj):ser_obj = PublisherSerializer(obj.publisher)return ser_obj.datadef get_author_info(self, obj):ser_obj = AuthorSerializer(obj.authors.all(),many=True)return ser_obj.dataclass Meta:model = models.Bookfields = '__all__'# depth = 1  # 跟对象关联的内容   属性read_only = True# exclude = [] #排除那些字段# exclude fields 不能同时存在# 自定义的字段extra_kwargs = {'category': {'write_only': True},'publisher': {'write_only': True},'authors': {'write_only': True},}
class BookView(APIView):   def get(self, request, pk):      """获取一本书的详情"""      # 1. 根据PK获取一本书的对象      book_obj = models.Book.objects.filter(pk=pk).first()      if book_obj:         # 2. 对书的对象进行json序列化         # ser_obj = BookSerializer(book_obj)         ser_obj = BookModelSerializer(book_obj)         # 3. 返回json数据         return Response(ser_obj.data)      else:         return Response({'error': '查无此书'})

   def put(self, request, pk):      """修改一本书"""      # 1. 获取书籍对象      book_obj = models.Book.objects.filter(pk=pk).first()

      # 2. 使用序列化器对数据进行校验 保存      # partial=True 修改局部的信息,不加需要提交所有的信息      ser_obj = BookModelSerializer(data=request.data, instance=book_obj, partial=True)      if ser_obj.is_valid():         ser_obj.save()         # 3. 返回修改后的对象的json数据         return Response(ser_obj.data)      else:         return Response(ser_obj.errors)

   def delete(self, request, pk):      """删除一本书"""      # 1. 获取书籍对象      book_obj = models.Book.objects.filter(pk=pk).first()      if book_obj:         # 2. 删除         book_obj.delete()         # 3. 返回json数据         return Response({'msg': '删除成功'})      else:         return Response({'error': '查无此书'})
 

  

转载于:https://www.cnblogs.com/lulin9501/p/11341218.html

Django中的 返回json对象的方式相关推荐

  1. 接口返回json对象出现套娃递归问题 | System.Text.Json 版本

    前言 看到一篇文章<Asp-Net-Core开发笔记:接口返回json对象出现套娃递归问题> 原文是使用 NewtonsoftJson 解决的返回json对象出现套娃递归问题: servi ...

  2. java action result_Struts2 Result 返回JSON对象详解

    如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择.而在基于Spring3 MVC的架构下,对HTTP+JSON的返回类型也有很好 ...

  3. Django中提供的6种缓存方式

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用: 缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...

  4. Django中Model继承的三种方式

    Django中Model继承的三种方式 Django中Model的继承有三种: 1.抽象继承 2.多表继承 3.proxy model(代理model) 1.抽象继承 第一种抽象继承,创建一个通用父类 ...

  5. php返回json数组元素,php生成返回json对象数组(json支持中文)

    php生成返回json对象数组 注意两种方法生成的对象数组在结构上的区别 $jarr=array( 'total' => 239, 'list' => array( array( 'cod ...

  6. python response.json()报错_Django JsonResponse json格式报错 解决Django响应JsonResponse返回json格式数据报错问题...

    想了解解决Django响应JsonResponse返回json格式数据报错问题的相关内容吗,彭世瑜在本文为您仔细讲解Django JsonResponse json格式报错的相关知识和一些Code实例 ...

  7. python response.json()报错_解决Django响应JsonResponse返回json格式数据报错问题

    解决Django响应JsonResponse返回json格式数据报错问题,给大家,报错,代码,图书,希望能 解决Django响应JsonResponse返回json格式数据报错问题 易采站长站,站长之 ...

  8. action对象 java_struts2通过action返回json对象

    其实struts2通过action返回json挺简单的,但是就是老要忘,所以索性写在博客上.好的,开始. 首先是引入必须的jar包: struts2-json-plugin-2.3.24.jar 然后 ...

  9. php 返回json对象

    2019独角兽企业重金招聘Python工程师标准>>> 服务器端使用php+ajax调用返回json对象. php <?php $result = array('Status' ...

  10. java 控制器 返回 json_SpringMVC中controller返回json数据的方法

    java 控制器 返回 json_SpringMVC中controller返回json数据的方法 1.方法一: 使用springmvc原生注解@ResponseBody @ResponseBody @ ...

最新文章

  1. Kafka的生产者优秀架构设计
  2. mSystems:南京土壤所禇海燕组受邀发表微生物生物地理学综述(官方配视频简介)
  3. Object-C与Swift混合开发
  4. 【Win32汇编】五种寻址方式
  5. vb跨域访问ajax,解决AJAX的跨域访问-两种有效示例
  6. 计算机原理课程设计陈宏,东北大学计算机组成基础原理课程教学设计.doc
  7. ThinkPHP文件上传
  8. Asp.net MVC 4 Attributes特性
  9. 函数 strcmp_【函数分享】每日PHP函数分享(2020630)
  10. WSO2 IS 添加新的证书域名
  11. 全志F1c100s主线linux入坑记录 (4)GT911触摸移植
  12. install par
  13. 【Linux应用】Clonezilla使用指南
  14. 某一个网站打不开,其它网站都能正常打开
  15. 基于卷积神经网络进行图像分类
  16. iOS tableView 右侧索引视图状态获取
  17. 比JMeter还轻量的压力测试工具是谁?Siege
  18. JS if 水仙花数 游乐园门票计算 闰年 三元运算符 for循环 算法 穷举法 While 拔萝卜 等差数 随机数函数random 区间数 猜数字
  19. 网络技术-ENSP 华为模拟器(三)身份认证
  20. 节点表征学习[GCN、GAT]

热门文章

  1. 中国好声音不如有中国好创意
  2. redhat solutions
  3. Flex 与.net 进行通信可以通过Fluorine(fluorinefx),WebORB For .net,Socket
  4. 11款实用的一句话网站设计代码
  5. markdown语法中的空格_Markdown实用技巧-基础语法
  6. python遍历字典修改值_Python中遍历字典过程中更改元素导致异常的解决方法
  7. python 获取当前路径_Python获取当前路径实现代码
  8. [图解]创建虚拟机以及安装CentOS系统和创建自定义布局
  9. vue 第十天 (组件的基本使用)
  10. JavaScript之定义函数的方法