django rest framework 序列化组件总结
序列化组件总结
一.
序列化组件本质上为了实现前后端分离,而进行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 序列化组件总结的更多相关文章
- [Django REST framework - 序列化组件、source、钩子函数]
[Django REST framework - 序列化组件.source.钩子函数] 序列化器-Serializer 什么是rest_framework序列化? 在写前后端不分离的项目时: 我们有f ...
- [Django REST framework - 视图组件之视图基类、视图扩展类、视图子类、视图集]
[Django REST framework - 视图组件之视图基类.视图扩展类.视图子类.视图集] 视图继承关系 详图见文章末尾 视图组件可点我查看 两个视图基类:APIView.GenericAP ...
- Django REST Framework序列化器
Django序列化和json模块的序列化 从数据库中取出数据后,虽然不能直接将queryset和model对象以及datetime类型序列化,但都可以将其转化成可以序列化的类型,再序列化. 功能需求都 ...
- Django REST framework序列化
一.简介 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API. 官网:https://www.djang ...
- 02 Django REST Framework 序列化
01-创建序列化类 # 方式一: publish_list = models.Publish.objects.all() # 导入序列化组件 from django.core import seria ...
- django rest_framework Serializers 序列化组件
为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿 ...
- Django REST Framework 序列化和校验 知识点
DRF序列化 Django ORM对象 --> JSON格式的数据 序列化 JSON格式的数据 --> Django ORM数据 反序列化 需要两个工具: from rest_framew ...
- Django 之restfromwork 序列化组件实现数据增删查改
rest-framework序列化之Serializer models.py from django.db import models # Create your models here. class ...
- Django REST framework 基本组件
一.序列化组件 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式.我们可以通过声明与Django forms ...
随机推荐
- [LeetCode] 277. Find the Celebrity 寻找名人
Suppose you are at a party with n people (labeled from 0 to n - 1) and among them, there may exist o ...
- 从GopherChina 2019看当前的go语言
GopherChina 2019大会4月底刚刚结束,大会上使用的PPT也放了出来(大会情况及PPT在https://mp.weixin.qq.com/s/_oVpIcBMVIKVzQn6YrkAJw) ...
- OAuth2.0 自我领悟
grant_type 授权模式 authorization_code 标准的Server授权模式,授权码模式 password 基于用户密码的授权模式,用户密码模式 client_credential ...
- Java非侵入式API接口即文档工具apigcc
一个非侵入的api编译.收集.Rest文档生成工具.工具通过分析代码和注释,获取文档信息,生成RestDoc文档 前言 程序员一直以来都有一个烦恼,只想写代码,不想写文档.代码就表达了我的思想和灵魂. ...
- .NET Core:中间件
中间件是组装到应用程序管道中以处理请求和响应的软件,功能上更贴合系统的使用中间件. 每个组件: 选择是否将请求传递给管道中的下一个组件. 可以在调用管道中的下一个组件之前和之后执行工作. 请求委托(R ...
- 京东联盟开发(12)——删除MySQL表中重复记录并且只保留一条
本文介绍如何删除商品表中的一些重复记录. 有时,一条商品由于有多个skuid,比如某种手机有不同颜色,但价格.优惠等信息却是一致,导致其被多次收录.由于其各种条件基本类似,这样它在商品中多个sku都排 ...
- Qt Quick 多媒体 - 播放音乐和视频
MediaPlayer 是 QML 提供的核心多媒体类,可以播放音频.视频.要使用 MediaPlayer,需要引入 QtMultimedia 模块,在 QML 文档的开始加入 "impor ...
- Linux下Maven私服Nexus3.x环境构建操作记录
原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79553747 私服介绍 私服是指私有服务器,是架设在局域网的一种特殊的远程仓库, ...
- Beta冲刺(6/7)——2019.5.28
作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Beta冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 队 ...
- 【leetcode-449】序列化和反序列化二叉搜索树
序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建. 设计一个算法来序列化和反序列化二叉搜索树. 对序列 ...