序列化器Serializer

作用:

  1. 序列化,序列化器会把模型对象转换成字典,经过request以后变成json字符串
  2. 反序列化,把客户端发送过来的数据,经过request以后变成字典(request.data),序列化器(类)可以把字典转成模型
  3. 反序列化,完成数据校验功能

本质就是写一个类,继承基类。

可以完成序列化,反序列化和数据校验。

读取数据为序列化,新增为反序列化。

通过serizlizer实现五个接口,此为第一步。

查询所有接口,新增数据接口

serizlizer.py

"""
与表没有关系,需要自己建关系
from rest_framework.serializers import Serializer
"""
from rest_framework import serializers# 需要序列化和反序列化Book表,可称呼为序列化类
class BoookSerializers(serializers.Serializer):# 写字段(需要序列化,反序列化的字段)name = serializers.CharField()price = serializers.IntegerField()publish = serializers.CharField()# 新增需要重写createdef create(self, validated_data):# {'name': '新增2', 'price': 10, 'publish': '测试出版社'}# print(validated_data)book = Books.objects.create(**validated_data)# Books object (7)# print(book)return book

views.py,发序列化新增,序列化读取。

"""
drf使用方式:CBV,继承的类,是drf提供的类,APIView
使用drf 多了一个Response类
"""
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.request import Request
from .serizlizer import BoookSerializers
from .models import Booksclass BookAPIView(APIView):# 查询所有的接口def get(self, request, *args, **kwargs):# 从数据库中把所有的数据取出,取出Books所有的queryset对象book_list = Books.objects.all()# <QuerySet [<Books: Books object (1)>, <Books: Books object (3)>]>print(book_list)"""类实例化得到对象(ser),并转为字典,此处为序列化过程,把queryset转成字典BookSerializers(需要序列化的queryset对象,data=None可以不传,如果序列化多条数据需要加many=True)"""ser = BoookSerializers(instance=book_list, many=True)"""字典[OrderedDict([('name', '葫芦娃'), ('price', 10), ('publish', '测试出版社')]), OrderedDict([('name', '互撸娃'), ('price', 10000), ('publish', '娃哈哈出版社')])]"""print(ser.data)# <class 'rest_framework.utils.serializer_helpers.ReturnList'>print(type(ser.data))# ser.data 序列化转成字典return Response(ser.data)# 新增def post(self,request,*args, **kwargs):# <rest_framework.request.Request: POST '/books/'>print(request)# {'name': '新增8', 'price': 10, 'publish': '测试出版社'}print(request.data)ser = BookSerializers(data=request.data)if ser.is_valid():ser.save()return Response(ser.data)

url.py

from django.contrib import admin
from django.urls import path
from app01 import views
# from rest_framework.routers import SimpleRouterurlpatterns = [path('admin/', admin.site.urls),# drf 继承APIView 的路由,向books地址发送请求,将所有图书返回path('books/', views.BookAPIView.as_view())]

查询单个接口,删除单个接口,修改

Serializers.py

from rest_framework import serializers# 需要序列化和反序列化Book表
class BookSerializers(serializers.Serializer):# 写字段(需要序列化,反序列化的字段)name = serializers.CharField()price = serializers.IntegerField()publish = serializers.CharField()# 如果要更新,一定要重写updata方法def update(self, instance, validated_data):# Books object (1)print(instance)instance.name = validated_data.get('name')# jajajaj 修改的数据print(instance.name)instance.price = validated_data.get('price')instance.publish = validated_data.get('publish')# 保存instance.save()# 返回return instance

url.py

from django.contrib import admin
from django.urls import path
from app01 import views
# from rest_framework.routers import SimpleRouterurlpatterns = [path('admin/', admin.site.urls),# drf 继承APIView 的路由,向books地址发送请求,将所有图书返回path('books/', views.BookAPIView.as_view()),# <int:pk> 转换器,int为定义类型,数据类型可自定义。path('books/<int:pk>', views.BookDetilAPIView.as_view()),
]

views.py

class BookDetilAPIView(APIView):# 查询单个接口def get(self,request,pk):book = Books.objects.filter(pk=pk).first()# Books object (1)# print(book)# <class 'app01.models.Books'># print(type(book))"""此处为序列化过程,把queryset转成字典many=True 需要改为False,此时为查询单条数据,不写,many默认为False,"""ser = BookSerializers(instance=book)return Response(ser.data)# 删除单个接口def delete(self,request,pk):Books.objects.filter(pk=pk).delete()return Response()# 修改单条数据def put(self,request,pk):# <rest_framework.request.Request: PUT '/books/1'># print(request)book = Books.objects.filter(pk=pk).first()# {'name': '哈哈哈', 'price': 10, 'publish': '测试出版社'},内部自动返序列化# print(request.data)ser = BookSerializers(instance=book,data=request.data)# 校验数据if ser.is_valid():ser.save()return Response(ser.data)

drf : 序列化器Serializer相关推荐

  1. 快速上手Django(六) -Django之Django drf 序列化器Serializer类

    文章目录 快速上手Django(六) -Django之Django drf 序列化器Serializer类 1. 背景 2. 使用思路 3. 代码demo 4. [重要]序列化类 ModelSeria ...

  2. drf序列化器-Serializer

    Python之drf序列化器-Serializer 一.序列化器-Serializer的作用 序列化,序列化器会将模型类对象转化为字典,经过Response变成json字符串 反序列化,把客户发送过来 ...

  3. Django 基础(13)-Django drf 序列化器类to_representation和to_internal_value(处理返回的日期格式)、序列化类 ModelSerializer

    文章目录 一.Django drf 序列化 1. 背景 2. 使用思路 3. 代码demo 4. [重要]序列化类 ModelSerializer 5. DRF序列化器to_representatio ...

  4. DRF序列化器详细使用

    视图的功能:说白了就是接收前端请求,进行数据处理 (这里的处理包括:如果前端是GET请求,则构造查询集,将结果返回,这个过程为序列化:如果前端是POST请求,假如要对数据库进行改动,则需要拿到前端发来 ...

  5. Django REST Framework教程(4): 玩转序列化器(Serializer)

    在前面的文章中我们以博客为例,自定义了一个简单的 ArticleSerializer 类, 并分别以函数视图(FBV)和基于类的视图(CBV)编写了博客文章列表资源和单篇文章资源的API,支持客户端以 ...

  6. DRF 序列化器的使用

    序列化使用 我们在django shell中来学习序列化器的使用. python manage.py shell 1 基本使用 1) 先查询出一个图书对象 from booktest.models i ...

  7. 谈谈Django REST Framework(DRF)中的序列化器

    摘要 Django REST Framework(DRF)是一个强大的工具,可以帮助我们构建和处理RESTful API.其中的序列化器(Serializers)是其核心组件之一,它允许我们快速有效地 ...

  8. 定义Serializer序列化器

    序列化器的作用: 进行数据的校验 对数据对象进行转换 定义Serializer 1. 定义方法 Django REST framework中的Serializer使用类来定义,须继承自rest_fra ...

  9. DRF框架—序列化器中的字段校验规则

    一.怎么校验创建的项目名是否是唯一的,当项目名name字段不唯一,怎么设置提示信息? 方法:导入UniqueValidator from rest_framework.validators impor ...

最新文章

  1. 全网最全的Windows下Anaconda2 / Anaconda3里Python语言实现定时发送微信消息给好友或群里(图文详解)...
  2. iOS 直播专题2-音视频采集
  3. Requests方法 -- 关联用例执行
  4. Nginx三部曲之一【配置文件详解】
  5. OpenSuse11.4+Apache+Django搭建Webserver
  6. 苹果Mac桌面Dock中App icon 名称显示乱码怎么办?一个简单指令帮你解决
  7. Python:bs4的使用
  8. java如何制作浪漫表白界面_表白网页在线制作详细教程-我要表白网-最浪漫的表白网页在线生成网站...
  9. 详细讲述matlab中矩阵的卷积函数convn
  10. 运放放大倍数计算公式_运算放大器基本电路大全(转)
  11. 华为手机怎么刷android系统,怎样刷入安卓原生系统 在手机系统更新这件事上,小米华为和OPPOvivo谁更有良心...
  12. ffmpeg rtmp推流
  13. CCF-CSP-201409-5 拼图
  14. fragment与activity之间的信息传递的两种方式
  15. Lambda表达式使用具备条件
  16. 计算机管理 看内存个数,如何知道/查看内存槽数
  17. 拍卖小程序直播功能扩展之翻转摄像头、美颜
  18. 权威发布:彻底搞清楚哪些笔记本和台式机主板可以支持42mm SATA M.2 NGFF(2242)接口的固态硬盘!!!
  19. 红外线测速仪 简易实现
  20. 并列句------六级

热门文章

  1. 保险丝有哪些分类它的工作原理是什么?
  2. IP报头的协议类型字段取值
  3. 九,DRF JWT-RBAC
  4. 谷歌经营之道(How Google Works )
  5. GPT中的temperature参数不是用在对话的而是用在调用OPEN API过程中的
  6. dbf 到 excel转换
  7. 百度地图开发:地图调起API(Web端)使用终点经纬度直接调用百度地图导航信息的解决方案
  8. 性能为王,科视 1DLP 激光投影机以“质”服人
  9. Red Hat Enterprise Linux 7 Release Candidate Now Publicly Available
  10. 陈皓的职业规划——CSDN对他的采访