在上一节说了Serializers的使用类似Django的From,在Django中有From也有ModelFrom,Serializers也是有个ModelSerializers,下面在讲讲restful的MldelSerializer序列化。

一、ModelSerializers

我们来用ModelSerializer类重构serializer,利用ModelSerializer实现之前写的功能

class Test_app_model_serializer(serializers.ModelSerializer):
class Meta:
model = models.Game
fields = ('id', 'name', 'company', 'turnover') # 重要的是要记住,ModelSerializer类不会做任何特别神奇的事情,它们只是创建序列化器类的快捷方式,该类实现了一下两个功能:
# 1. 一组自动确定的字段。
# 2. 简单的默认实现create()和update()方法。

是使用ModelSerializer编写视图函数,这里的代码实现和上一节中的代码除了调用的Serializer类不通以为,其他的都一模一样。这里可以帮助你更好的理解ModelSerializer类都干了那些事儿。

from django.shortcuts import render
from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt # 忽略post请求时的csrf问题
from test_app import serializer
from test_app import models
from rest_framework.renderers import JSONRenderer # restful提供的序列化类
from rest_framework.parsers import JSONParser # restful提供的反序列化类 # Create your views here. @csrf_exempt
def game_list(request):
if request.method == 'GET':
game = models.Game.objects.all() # 获取数据库中所有数据
game_serializer = serializer.Test_app_model_serializer(instance=game,
many=True) # 通过自定义的serializer实例化数据,many参数为True表示处理多条数据
# return HttpResponse(JSONRenderer().render(game_serializer.data), status=200) # 序列化serializer实例的数据
return JsonResponse(game_serializer.data,safe=False)
elif request.method == 'POST':
data = JSONParser().parse(request) # 通过JsonParser类反序列化POST过来的数据
game_serializer = serializer.Test_app_model_serializer(data=data) # 通过反序列化后的数据创建serializer实例
print(game_serializer)
if game_serializer.is_valid(): # 通过is_valid()方法判断数据类型是否正确,这点和Django的From相似
game_serializer.save() # 验证通过保存数据,这里的game_serializer是自定义serializer的create函数返回的对象,进行保存
# return HttpResponse(JSONRenderer().render(game_serializer.data)) # 序列化数据返回前端
return JsonResponse(game_serializer.data,safe=False)
else: # 验证不通过,输出对应的报错信息
print("验证不通过")
# return HttpResponse(JSONRenderer().render(game_serializer.errors))
print(type(game_serializer.errors))
return JsonResponse(game_serializer.errors) # 注释同上
@csrf_exempt
def game_info(request, game_id):
game_obj = models.Game.objects.get(id=game_id)
if request.method == 'GET':
game_serializer = serializer.Test_app_model_serializer(instance=game_obj)
data = JSONRenderer().render(game_serializer.data)
return HttpResponse(data)
elif request.method == 'PUT':
data = JSONParser().parse(request)
game_serializer = serializer.Test_app_model_serializer(instance=game_obj, data=data)
if game_serializer.is_valid():
game_serializer.save()
# return HttpResponse(JSONRenderer().render(game_serializer.data))
return JsonResponse(game_serializer.data, status=201)
return JsonResponse(game_serializer.errors, status=400)
elif request.method == 'DELETE':
game_obj.delete()
return HttpResponse(status=204)

调用ModelSerializer类的视图函数

最新文章

  1. JavaScript错误/异常处理
  2. 弱省互测#1 t3
  3. MyEclipse的项目中把 java EE 5 Libraries 删掉后怎么重新导入
  4. 转-利用Oracle审计功能来监测试环境的变化
  5. [转]Flash Socket通信的安全策略
  6. 【wikioi】1281 Xn数列(矩阵乘法)
  7. [svn] 分支开发
  8. 设置emacs插件flycheck使用jslint eslint
  9. MYSQL正式环境主从复制(不锁表,不停服务)
  10. OCP读书笔记(25) - 题库(ExamE)
  11. 产品经理学Python:逻辑判断与运算符
  12. Json和Ajax
  13. Game Engine Architecture 8
  14. Sunscreen [POJ3614] [贪心]
  15. Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
  16. Python文件学习
  17. CSS规范 - 分类方法--(来自网易)
  18. 寂静之地百度云在线观看迅雷下载A Quiet Place高清BT下载
  19. 生产BackPressure 的代码
  20. Kali2018.1

热门文章

  1. python 一篇搞定所有的异常处理
  2. $.ajax 中的contentType
  3. Python内置函数(35)——next
  4. 如何排查CPU飙升的Java问题
  5. 获取apk项目的MD5值和SHA1值
  6. Python学习之条件判断和循环
  7. spark2.1操作json(save/read)
  8. ArUco----一个微型现实增强库的介绍及视觉应用(一)
  9. 浮动和BFC的学习整理转述
  10. Java高级篇(三)——JDBC数据库编程