在上一节说了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类的视图函数

django rest-framework 1.序列化 二的更多相关文章

  1. Django Rest framework 之 序列化

    RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...

  2. Django REST Framework的序列化器是什么?

    # 转载请留言联系 用Django开发RESTful风格的API存在着很多重复的步骤.详细可见:https://www.cnblogs.com/chichung/p/9933861.html 过程往往 ...

  3. Django Rest Framework(2)-----序列化详解(serializers)

    REST framework中的序列化类与Django的Form和ModelForm类非常相似.我们提供了一个Serializer类,它提供了一种强大的通用方法来控制响应的输出,以及一个ModelSe ...

  4. django rest framework serializers序列化

    serializers是将复杂的数据结构变成json或者xml这个格式的 serializers有以下几个作用: - 将queryset与model实例等进行序列化,转化成json格式,返回给用户(a ...

  5. Django restful Framework 之序列化与反序列化

    1. 首先在已建好的工程目录下新建app命名为snippets,并将snippets app以及rest_framework app加到工程目录的 INSTALLED_APPS 中去,具体如下: IN ...

  6. Django rest framework之序列化小结

       最近在DRF的序列化上踩过了不少坑,特此结合官方文档记录下,方便日后查阅. [01]前言    serializers是什么?官网是这样的”Serializers allow complex d ...

  7. DRF Django REST framework 之 序列化(三)

    Django 原生 serializer (序列化) 导入模块 from django.core.serializers import serialize 获取queryset 对queryset进行 ...

  8. django-插件django REST framework,返回序列化的数据

    官网: http://www.django-rest-framework.org 1.安装 pip install djangorestframework 2.在setting.py中注册app 中添 ...

  9. django rest framework serializers

    django rest framework serializers序列化   serializers是将复杂的数据结构变成json或者xml这个格式的 serializers有以下几个作用:- 将qu ...

  10. django rest framework 项目创建

    Django Rest Framework 是一个强大且灵活的工具包,用以构建Web API 为什么要使用Rest Framework Django REST Framework可以在Django的基 ...

随机推荐

  1. :after/:before使用技巧

    伪类:after/:before基本使用 div:before{ content:'';//必须要写,没写则伪元素无效 display:; position:''; ... } //在一个div子元素 ...

  2. WebApi 方法的参数类型总结。

    1:[HttpGet]  ①:get方法之无参数. [HttpGet] public IHttpActionResult GetStudentInfor() { List<StudentMode ...

  3. JAVA_SE基础——4.path的临时配置&Classpath的配置

    这次,我来写下关于path的临时配置的心的 我来说个有可能的实例:如果你去到别人的电脑 又想写代码 又不想改乱别人的path配置的话  再说别人愿意你在别人的电脑上瞎配吗? 那该怎么办呢? 那没问题 ...

  4. ASP.NET MVC中错误处理方式

    /// <summary> /// 标记了HandleError,并指明错误处理页为AboutError.aspx /// </summary> /// <returns ...

  5. Ubuntu 17.10.1安装, 定制

    p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 2018.4.7 Ubuntu 17.10.1安装, 定制, 后续搭建LAMP环境 ...

  6. Tomcat性能优化及JVM内存工作原理

    Java性能优化原则:代码运算性能.内存回收.应用配置(影响Java程序主要原因是垃圾回收,下面会重点介绍这方面) 代码层优化:避免过多循环嵌套.调用和复杂逻辑. Tomcat调优主要内容如下: 1. ...

  7. javascript实现浏览器窗口大小被改变时触发事件的方法

    转载 当浏览器的窗口大小被改变时触发的事件window.onresize 为事件指定代码: 复制代码代码如下: window.onresize = function(){ } 例如: 浏览器可见区域信 ...

  8. HTTP协议扫盲(三)HTTP协议的请求头列表和分类描述

    一.请求报头和响应报头列表 1.Requests 头列表 Header 解释 示例 Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html Accept ...

  9. HTML5的常用新特性你必须知道

    HTML5的常用新特性你必须知道 1 新的 声明 HTML 有多个不同的版本,只有完全明白页面中使用的确切 HTML 版本,浏览器才能完全正确地显示出 HTML 页面.这就是 的用处. 不是 HTML ...

  10. C++中友元

    一.友元分为两种 1.友元函数 2.友元类 二.解析比较好的博客:http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/04/2535305.htm ...