我是靠谱客的博主 如意御姐,最近开发中收集的这篇文章主要介绍复习序列化序列化器使用模型类字段>instance要修改的对象反序列化 添加数据获取单个数据对象获取全部数据对象,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

序列化器使用

作用:

1.进行数据的校验-----反序列
2.将模型类的对象转换为字典—序列化
3.减少代码量,提高编码效率----序列化器

序列化定义:

将模型类对象转为字典,然后经过Response转为json字符串--------称为序列化

反序列化定义:

将网络中的json字符串经过Request对象,转为字典或者类字典,然后经过序列化器转为模型类的对象------称为反序列化

定义模型类的序列化器,需继承

rest_framework.serializers.Serializer —序列化器

rest_framework.serializers.ModelSerializer —模型类的序列化器

Serializer使用方式

反序列化插入数据时,必须重写create方法;反序列化更新数据时,必须重写update方法。

模型类字段

//  from django.db import models

# Create your models here.
#登录模型类
class Dlmodel(models.Model):
    sjh = models.CharField(max_length=11, verbose_name="手机号")

    class Meta:
        db_table = 'dl'
        verbose_name_plural = "登录"

    def __str__(self):
        return self.sjh

#导航栏模型类
class Dhlmodel(models.Model):
    dhl = models.CharField(max_length=12, verbose_name="导航栏")

    class Meta:
        db_table = 'dhl'
        verbose_name_plural = "导航栏"

    def __str__(self):
        return self.dhl

#内容模型类
class Nrmodel(models.Model):
    mz = models.CharField(max_length=32, verbose_name="名字")
    nr = models.CharField(max_length=320, verbose_name="内容")
    zz = models.CharField(max_length=12, verbose_name="作者")
    yd = models.CharField(max_length=12, verbose_name="阅读")
    ss = models.ForeignKey(to=Dhlmodel, on_delete=models.CASCADE, verbose_name="所属")

    class Meta:
        db_table = 'nr'
        verbose_name_plural = "内容"

    def __str__(self):
        return self.mz

#评论模型类
class Plmodel(models.Model):
    pl = models.CharField(max_length=320, verbose_name="评论")
    ss = models.ForeignKey(to=Nrmodel, on_delete=models.CASCADE, verbose_name='所属')

    class Meta:
        db_table = 'pl'
        verbose_name_plural = "漂亮"

    def __str__(self):
        return self.pl

   

在这里插入图片描述
在这里插入图片描述

>instance要修改的对象

data 要修改的数据
partial=True 默认修改全部,为True时,可以修改部分字段

序列化时,Serializer和ModelSeialiaer没有区别;

反序列化时,ModelSerializer由于自带create方法和update方法,所以不用重写这两个方法。

反序列化 添加数据

//  class DepartmentListView(GenericAPIView):
    queryset = Department.objects.all()  # 指定查询集
    serializer_class = DepartmentModelSerializer  # 指定序列化器类

    def post(self, request):
        # 接收网页发送的数据
        name = request.data.get('name')
        # 获取部门对象,用来判断部门是否存在
        department_obj = Department.objects.filter(name=name)
        # 判断部门是否存在,如果存在,返回部门存在
        if department_obj:
            return Response({'msg': '部门存在', 'code': 400})
        # 不存在时,反序列化添加部门
        dep_serializer = self.get_serializer(data=request.data)
        # 校验
        if dep_serializer.is_valid():
            # 校验通过,保存数据
            dep_serializer.save()
            # 返回
            return Response({'msg': '添加成功', 'code': 200})
        # 校验失败,返回错误消息
        else:
            return Response({'error': dep_serializer.errors, 'code': 400})

获取单个数据对象

//  from rest_framework.generics import GenericAPIView
from rest_framework.response import Response

from .models import Department
from .serializer import DepartmentModelSerializer

#路由  path("/<int:pk>/", DepDetailView.as_view())
class DepDetailView(GenericAPIView):
    queryset = Department.objects.all()  # 指定查询集
    serializer_class = DepartmentModelSerializer  # 指定序列化器类
   
    lookup_field = 'pk'  # 过滤的orm参数

    def get(self, request, pk):
        department = self.get_object()  # 获取单条数据
        dep_serializer = self.get_serializer(department)
        return Response(dep_serializer.data)

获取全部数据对象

//  from rest_framework.generics import GenericAPIView
from rest_framework.response import Response

from .models import Department
from .serializer import DepartmentModelSerializer


class DepartmentListView(GenericAPIView):
    queryset = Department.objects.all()  # 指定查询集
    serializer_class = DepartmentModelSerializer  # 指定序列化器类

    def get(self, request):
        department_list = self.get_queryset()  # 获取查询集数据
        dep_serializer = self.get_serializer(department_list, many=True)
        return Response(dep_serializer.data)

最后

以上就是如意御姐为你收集整理的复习序列化序列化器使用模型类字段>instance要修改的对象反序列化 添加数据获取单个数据对象获取全部数据对象的全部内容,希望文章能够帮你解决复习序列化序列化器使用模型类字段>instance要修改的对象反序列化 添加数据获取单个数据对象获取全部数据对象所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部