在上一节说了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. 修改MYSQL的默认连接时长

    show global variables like 'wait_timeout'; 设置成10小时; set global wait_timeout=36000;

  2. bzoj千题计划276:bzoj4515: [Sdoi2016]游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=4515 把lca带进式子,得到新的式子 然后就是 维护树上一次函数取min 一个调了一下午的错误: 当 ...

  3. CentOS搭建Git服务器及权限管理

    声明:本教程,仅作为配置的记录,细节不展开,需要您有一点linux的命令基础,仅作为配置参考. 1. 系统环境 系统: Linux:CentOS 7.2 64位 由于CentOS已经内置了OpenSS ...

  4. (干货)微信小程序之上传图片和图片预览

    这几天一直负责做微信小程序这一块,也可以说是边做边学习吧,把自己做的微信小程序的一些功能分享出来,与大家探讨一下,相互学习相互进步. 先看下效果图 只写了一下效果样式的话希望大家不要太在意,下面马路杀 ...

  5. Bootstrap 栅格系统简单整理

    Bootstrap内置了一套响应式.移动设备优先的流式栅格系统,随着屏幕设备或视口(viewport)尺寸的增加,系统会自动分为最多12列. 总结一下我近期的学习Bootstrap的一些理解: 一.. ...

  6. Linux搭建Apache+Tomcat实现负载均衡

    一.首先需要安装java,详见http://www.cnblogs.com/fun0623/p/4350004.html 二.编译安装Apache,详见http://www.cnblogs.com/f ...

  7. Python基础-用户验证

    一.项目需求 1.根据用户名和密码,验证用户是否可登陆 2.允许一次执行可验证三次 3.当用户名输错三次后,该用户名锁定,永久不可登陆 二.代码如下 #!/usr/bin/env python #-* ...

  8. VMwaretools、共享文件夹、全屏

    VMware12.1  +  Ubuntu14.04   +  win10专业版  设置  共享文件夹和解决Ubuntu全屏问题. 我实在不喜欢这种敲敲打打的工作,不喜欢这种有点无聊的配置环境.我喜欢 ...

  9. easygui的导入方式

    方法一: >>> import easygui >>> easygui.msgbox('hello') 方法二: >>> from easygui ...

  10. 在服务器上,配置redis可以外网访问

    首先linux开放默认端口6379打开redis配置文件redis-conf注释掉 bind 127.0.0.1(默认只有本地主要才能访问)这个注释掉现在处于受保护的状态,外网连不上,因为没有密码 在 ...