Django中的 返回json对象的方式
在返回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对象的方式相关推荐
- 接口返回json对象出现套娃递归问题 | System.Text.Json 版本
前言 看到一篇文章<Asp-Net-Core开发笔记:接口返回json对象出现套娃递归问题> 原文是使用 NewtonsoftJson 解决的返回json对象出现套娃递归问题: servi ...
- java action result_Struts2 Result 返回JSON对象详解
如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择.而在基于Spring3 MVC的架构下,对HTTP+JSON的返回类型也有很好 ...
- Django中提供的6种缓存方式
由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用: 缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...
- Django中Model继承的三种方式
Django中Model继承的三种方式 Django中Model的继承有三种: 1.抽象继承 2.多表继承 3.proxy model(代理model) 1.抽象继承 第一种抽象继承,创建一个通用父类 ...
- php返回json数组元素,php生成返回json对象数组(json支持中文)
php生成返回json对象数组 注意两种方法生成的对象数组在结构上的区别 $jarr=array( 'total' => 239, 'list' => array( array( 'cod ...
- python response.json()报错_Django JsonResponse json格式报错 解决Django响应JsonResponse返回json格式数据报错问题...
想了解解决Django响应JsonResponse返回json格式数据报错问题的相关内容吗,彭世瑜在本文为您仔细讲解Django JsonResponse json格式报错的相关知识和一些Code实例 ...
- python response.json()报错_解决Django响应JsonResponse返回json格式数据报错问题
解决Django响应JsonResponse返回json格式数据报错问题,给大家,报错,代码,图书,希望能 解决Django响应JsonResponse返回json格式数据报错问题 易采站长站,站长之 ...
- action对象 java_struts2通过action返回json对象
其实struts2通过action返回json挺简单的,但是就是老要忘,所以索性写在博客上.好的,开始. 首先是引入必须的jar包: struts2-json-plugin-2.3.24.jar 然后 ...
- php 返回json对象
2019独角兽企业重金招聘Python工程师标准>>> 服务器端使用php+ajax调用返回json对象. php <?php $result = array('Status' ...
- java 控制器 返回 json_SpringMVC中controller返回json数据的方法
java 控制器 返回 json_SpringMVC中controller返回json数据的方法 1.方法一: 使用springmvc原生注解@ResponseBody @ResponseBody @ ...
最新文章
- Kafka的生产者优秀架构设计
- mSystems:南京土壤所禇海燕组受邀发表微生物生物地理学综述(官方配视频简介)
- Object-C与Swift混合开发
- 【Win32汇编】五种寻址方式
- vb跨域访问ajax,解决AJAX的跨域访问-两种有效示例
- 计算机原理课程设计陈宏,东北大学计算机组成基础原理课程教学设计.doc
- ThinkPHP文件上传
- Asp.net MVC 4 Attributes特性
- 函数 strcmp_【函数分享】每日PHP函数分享(2020630)
- WSO2 IS 添加新的证书域名
- 全志F1c100s主线linux入坑记录 (4)GT911触摸移植
- install par
- 【Linux应用】Clonezilla使用指南
- 某一个网站打不开,其它网站都能正常打开
- 基于卷积神经网络进行图像分类
- iOS tableView 右侧索引视图状态获取
- 比JMeter还轻量的压力测试工具是谁?Siege
- JS if 水仙花数 游乐园门票计算 闰年 三元运算符 for循环 算法 穷举法 While 拔萝卜 等差数 随机数函数random 区间数 猜数字
- 网络技术-ENSP 华为模拟器(三)身份认证
- 节点表征学习[GCN、GAT]
热门文章
- 中国好声音不如有中国好创意
- redhat solutions
- Flex 与.net 进行通信可以通过Fluorine(fluorinefx),WebORB For .net,Socket
- 11款实用的一句话网站设计代码
- markdown语法中的空格_Markdown实用技巧-基础语法
- python遍历字典修改值_Python中遍历字典过程中更改元素导致异常的解决方法
- python 获取当前路径_Python获取当前路径实现代码
- [图解]创建虚拟机以及安装CentOS系统和创建自定义布局
- vue 第十天 (组件的基本使用)
- JavaScript之定义函数的方法