序列化组件总结

一.

序列化组件本质上为了实现前后端分离,而进行json序列化的一个组件形式,极大方便了解析数据的作用

二.

所有序列化是基于APIView 解析器实现的,通过内部的多继承关系方便实现进行数据序列化的实现

使用方式

1.基于APIView 引入  from rest_framework.views import APIView

2.返回的请求用  Response  from rest_framework.response import Response

3.开始进行创建序列化类的方式  from rest_framework import serializers

第一步 创建序列化类

创建出在返回页面显示的字段 ,一对多关系同创建普通字段一样,无需特意声明关系,但需要引入sourse=publish.city

多对多关系需要手动创建一个特定的方法

第二步 创建需要解析的数据类 继承APIview 方法

创建的方法要遵循rest请求规范

1.获取需要传递的数据

2.将数据传到序列化类中,返回一个实例化对象

3.通过返回return Response (实例化对象.data)返回给页面

优化

一.问题

在进行post 请求时,需要不断创建字段添加数据,很麻烦

这样可以优化序列化类,引用serializers.ModelSerializer

同form表单的modelform也一样,

class META:

model:

fields:

extra_ksargs: 这里添加关联字段用的 字典形式{

'publish':{"write_only":true}

"authors":{"write_only":true}

}

显示的字段

publish_name = serializers.CharField(max_length=32, read_only=True, source='publish.name')
publish_city = serializers.CharField(max_length=32, read_only=True, source='publish.city') 手动创建的多对多数据

视图优化

即使优化了序列化类,但是发现数据类有很多的代码冗余,于是引入

mixins: from rest_framework.mixins import (
ListModelMixin,
CreateModelMixin,
DestroyModelMixin,
UpdateModelMixin,
RetrieveModelMixin
)

继承的apivies :from rest_framework.generics import GenericAPIView

通过创建数据类引用的模块优化代码

使用:

1.引入模块

2.创建类时有两个关键字段 quertset=找到的数据  serializer_class=引用的序列化类的名字

3.返回请求的特殊方式

def get(self,request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self,request, *args, **kwargs):
return self.create(request, *args, **kwargs)

4.urls 这里需要特定说明 引用 (?P<pk>\d+) 来拼接

path("course/",views.BookView.as_view()),
re_path("course/(?P<pk>\d+)/",views.BookFilterView.as_view())   

优化二

但是发现依然有大量代码冗余

于是引入接口逻辑新模块

from rest_framework import generics
通过
generics.ListCreateAPIView 里面的内置方法省掉了 多余的def get/post 请求方法,都被封装的里面 
但是会发现在查询 全部数据以及单个数据时候,需要创建两个数据类,可不可以用一个呢 于是引出最终优化
 

优化三

引入from rest_framework.viewsets import ModelViewSet 模块

这里更强大,只需要

class BookView(ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer 就足够了
但是在urls 里需要特意说明,,注意 都是引用一个视图函数哟
re_path("course/$",views.BookView.as_view({
"get":"list",
"post":'create',
})),
re_path("course/(?P<pk>\d+)/",views.BookView.as_view({
'get':'retrieve',
'put':"update",
'delete':"destroy"
}))

django rest framework 序列化组件总结的更多相关文章

  1. [Django REST framework - 序列化组件、source、钩子函数]

    [Django REST framework - 序列化组件.source.钩子函数] 序列化器-Serializer 什么是rest_framework序列化? 在写前后端不分离的项目时: 我们有f ...

  2. [Django REST framework - 视图组件之视图基类、视图扩展类、视图子类、视图集]

    [Django REST framework - 视图组件之视图基类.视图扩展类.视图子类.视图集] 视图继承关系 详图见文章末尾 视图组件可点我查看 两个视图基类:APIView.GenericAP ...

  3. Django REST Framework序列化器

    Django序列化和json模块的序列化 从数据库中取出数据后,虽然不能直接将queryset和model对象以及datetime类型序列化,但都可以将其转化成可以序列化的类型,再序列化. 功能需求都 ...

  4. Django REST framework序列化

    一.简介 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API. 官网:https://www.djang ...

  5. 02 Django REST Framework 序列化

    01-创建序列化类 # 方式一: publish_list = models.Publish.objects.all() # 导入序列化组件 from django.core import seria ...

  6. django rest_framework Serializers 序列化组件

    为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿 ...

  7. Django REST Framework 序列化和校验 知识点

    DRF序列化 Django ORM对象 --> JSON格式的数据 序列化 JSON格式的数据 --> Django ORM数据 反序列化 需要两个工具: from rest_framew ...

  8. Django 之restfromwork 序列化组件实现数据增删查改

    rest-framework序列化之Serializer models.py from django.db import models # Create your models here. class ...

  9. Django REST framework 基本组件

    一.序列化组件 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式.我们可以通过声明与Django forms ...

随机推荐

  1. [LeetCode] 40. Combination Sum II 组合之和之二

    Given a collection of candidate numbers (candidates) and a target number (target), find all unique c ...

  2. 《30天自制操作系统》笔记2 --- 初步了解汇编产生的二进制(Day1)

    nask.exe应该就是nas kit(nas开发工具的意思),由于这个编译器是作者自己写的,所以这种汇编语言应该是作者改造出来的,所以我叫它nas汇编语言. 作者说nask是模仿nasm语法的,关于 ...

  3. MySQL学习记录(导入Excel表到数据库,并筛选条件输出)

    附上:重置mysql账号密码方法 ubuntu系统下mysql重置密码和修改密码操作 - skh2015java的博客 - CSDN博客(改完重启,登录mysql要root/sudo权限) Cento ...

  4. java 获取用户输入

    import java.util.Scanner; public class Sample { public static void main(String[] args) { int num; Sc ...

  5. 搭建Jena Fuseki并执行SPARQL查询

    1. 下载Jena Fuseki:http://jena.apache.org/download/index.cgi 2. 运行服务 windows解压后双击fuseki-server.bat lin ...

  6. K8S 如何实现将git代码下拉到指定的容器路径中

    gitRepo 是 kubernetes Volume类型中的一种,gitRepo volume可以实现将git代码下拉到指定的容器路径中. 备注:实现此功能,Pod运行的节点都必需要安装git.换句 ...

  7. Unity Shader 2D水流效果

    水流的模拟主要运用了顶点变换和纹理动画的结合: 顶点变换中,利用正弦函数模拟河流的大致形态,例如波长,振幅等. 纹理动画中,将纹理坐标朝某一方向持续滚动以形成流动的效果. 脚本如下: Shader & ...

  8. Oracle性能调优之物化视图用法简介

    目录 一.物化视图简介 二.实践:创建物化视图 一.物化视图简介 物化视图分类 物化视图分类,物化视图语法和as后面的sql分为: (1) 基于主键的物化视图(主键物化视图) (2)基于Rowid的物 ...

  9. springboot 远程调试

    首先以调试模式启动编译好的jar包,监听端口为5005 java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,addre ...

  10. [转帖]微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务

    微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务 http://skaka.me/blog/2016/04/21/springcloud1/ APR 21ST,  ...