在返回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 类型的对象,不能直接json
queryset = 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 JsonResponse

class BookListView(View):
"""使用JsonResponse进行json序列化""" def get(self, request):
"""以json形式返回书籍的列表"""
# 1. 获取所有的书籍对象
queryset = models.Book.objects.all()
     ret = []
for book in queryset:
tmp = {}
tmp['id'] = book.pk
tmp['title'] = book.title
tmp['pub_date'] = book.pub_date # 时间类型的有问题,这里没有修改
tmp['publisher'] = book.publisher_id
tmp['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.data def get_author_info(self, obj):
ser_obj = AuthorSerializer(obj.authors.all(),many=True)
return ser_obj.data class Meta:
model = models.Book
fields = '__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': '查无此书'})
 

  

Django中的 返回json对象的方式的更多相关文章

  1. 转: .NET MVC3 几种返回 JSON 对象的方式和注意事项

    .NET MVC3 几种返回 JSON 对象的方式和注意事项 转自:http://blog.csdn.net/xxj_jing/article/details/7382589 引言在用 .NET MV ...

  2. spring mvc返回json字符串的方式

    spring mvc返回json字符串的方式 方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json            优点:不需要自己再处理 步骤一:在spring- ...

  3. Spring MVC学习笔记——返回JSON对象

    1.想要GET请求返回JSON对象,首先需要导入jackson-all-1.9.4.jar包 2.在控制器中添加不同的show()方法 //show()方法返回JSON对象 @RequestMappi ...

  4. 类型转换及返回json对象的问题

    @ResponseBody @RequestMapping(value="/user/getUserId.do")//method=RequestMethod.POST publi ...

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

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

  6. js中解析json对象:JSON.parse()用于从一个字符串中解析出json对象, JSON.stringify()用于从一个对象解析出字符串。

    JSON.parse()用于从一个字符串中解析出json对象. var str = '{"name":"huangxiaojian","age&quo ...

  7. [django]django 3种返回json方法

    django 3种返回json方法 1.手动组装字典返回 from django.http import JsonResponse, HttpResponse from django.shortcut ...

  8. Android中得到布局文件对象有三种方式

    Android中得到布局文件对象有三种方式 第一种,通过Activity对象 View view = Activity对象.getLayoutInflater().inflater(R.layout. ...

  9. DJango中开启事务的两种方式

    目录 Django中开启事务的两种方式 第一种 第二种 Django中开启事务的两种方式 第一种 from django.db import transaction with transaction. ...

随机推荐

  1. Uniswap详解之一(概览)

    一.Uniswap简介 Uniswap是以太坊上的DEX实现,基于"恒定乘积自动做市"模型,与传统的中心化和DEX具有很大的差别. 主要特点: 无订单簿,无做市商 兑换币具有很低的 ...

  2. 在浏览器输入 URL 回车之后发生了什么

    注意:本文的步骤是建立在,请求的是一个简单的 HTTP 请求,没有 HTTPS.HTTP2.最简单的 DNS.没有代理.并且服务器没有任何问题的基础上. 大致流程 URL 解析 DNS 查询 TCP ...

  3. MySQL Windows安装连接

    1.首先进入mysql的安装目录下的bin目录,例如我的是[C:\WINDOWS\System32\cmd.exe]   2.接着输入cmd,回车     3.在命令行中输入命令[mysql -hlo ...

  4. 微信企业红包api接入

    项目描述:基于微信浏览器的H5页面,接入微信支付接口和微信红包接口 一.接入前准备条件 1.微信公众号 需要基于已认证的微信公众号承载该H5页面.该条件默认已具备,本文重点为红包接口. 2.微信支付商 ...

  5. 预处理、编译、汇编、链接、启动代码、相关command

    被忽略的过程 对于C这种编译性语言,我们平时编译时,不管是通过IDE图形界面,还是通过命令行,总感觉编译一下就完成了,然后就得到了针对某OS和某CPU的二进制可执行文件(机器指令的文件).但是实际上在 ...

  6. python zipfile使用

    the Python challenge中第6关使用到zipfile模块,于是记录下zipfile的使用 zip日常使用只要是压缩跟解压操作,于是从这里入手 1.压缩 f=zipfile.ZipFil ...

  7. TCP中的长连接和短连接(转载)

    原文地址:http://www.cnblogs.com/onlysun/p/4520553.html 次挥手,所以说每个连接的建立都是需要资源消耗和时间消耗的  示意图:               ...

  8. linux实操_rpm包和yum包

    rpm包的简单查询指令: 查询已安装的rpm列表 rpm -qa | grep xxx 查询火狐浏览器 查询安装的rpm包软件的信息 查询rpm软件包的文件安装在哪里 查询文件属于哪个软件包 卸载rp ...

  9. ln -s /usr/local/jdk1.8.0_201/bin/java /bin/java

    ln -s /usr/local/jdk1.8.0_201/bin/java /bin/java

  10. Sort a list(tuple,dict)

    FROM:https://www.pythoncentral.io/how-to-sort-python-dictionaries-by-key-or-value/ AND https://www.p ...