Django REST Framework--序列化

本文详细介绍了Django REST Framework中序列化器的使用,包括模型序列化器的创建、外键处理、序列化与反序列化的运行机理。重点讲述了如何进行数据的获取、添加和修改操作,以及如何处理外键和自定义创建、更新方法。同时,提到了模型序列化的一些额外选项,如指定字段、排除字段和只读字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、功能

负责对象和Json格式的相互转换

  1. 获取数据:对象---->Json返回给前端
  2. 添加、修改---->对象 存储在数据库中

二、方法

  1. 基本用法
#新建序列化文件
from rest_framework import serializers
from .models import 库名
#对应数据库序列化
class 库名Serializer(serializers.ModelSerializer):

    class Meta:
        model=库名
        fields="__all__"
  1. 有外键的用法
from rest_framework import serializers
from .models import 数据库名
from 其它库名Serializer_path import 其它库名Serializer

#对应数据库序列化
class 库名Serializer(serializers.ModelSerializer):
    其它库名Serializer()
    class Meta:
        model=数据库名
        fields="__all__"
#其它库名是数据库名外键
#访问就是键名.小写其它库名.字段名

注:保存时会其它库名Serializer反序列化

解决的办法是重写create、update函数(create、update函数要在视图中写)
以下代码要在视图中写

from rest_framework.viewsets import ModelViewSet
from rest_framework.response import Response
from rest_framework import status
from .models import 数据库名
from .serializer import 库名Serializer

class 库名ViewSet(ModelViewSet):
    queryset = 库名.objects.all()
    serializer_class = 库名Serializer
    #添加方法(执行post请求)
    def create(self,request,*args,**kwargs):
       #接收前端数据
        rec = request.data
		#用rec.get('传过来json数据的key')
        try:
            数据库名.objects.create(field=rec.get('key')....)
            return Response({'msg':'添加成功'},status= status.HTTP_201_CREATED) 
        except Exception as e:
            return Response({'error':'添加失败%s'%e},status=status.HTTP_400_BAD_REQUEST)
        
    #修改方法(包含有put、patch两种请求)
    def update(self,request,*args,**kwargs):
       #接收前端数据
        rec = request.data
		#用rec.get('传过来json数据的key')
        try:
            数据库名.objects.filter(id=kwargs.get('id')).update(field=rec.get('key')....)
            #update可以是多个傎,也可以是部分值。
            #可以是1.field=value...
            #2. **rec(对字典解析)
            return Response({'msg':'修改成功'},status= status.HTTP_201_CREATED) 
        except Exception as e:
            return Response({'error':'修改败%s'%e},status=status.HTTP_400_BAD_REQUEST)
  1. 其它知识点
  • 模型序例化

    fields = (字段列表)
    
    exclude = (字段列表)
    
    fields = "__all__"
    
     read_only_fields = (字段列表)
    

要在class Meta:中写以上代码

from rest_framework import serializers
from .models import 数据库名
#对应数据库序列化
class 库名Serializer(serializers.ModelSerializer):
     库中的字段=其它库名Serializer()
    class Meta:
        model=数据库名
        fields="__all__"
#其它库名是数据库名外键
#访问就是键名.小写其它库名.字段名
#extra_keargs = {
'field':{"read_only":True}
    }
#作用:post提交时不能提交,但序列化时会返回值。

三、序列化与反序列化的运行机理

  1. 序列化
    序列化有两个类sexializer、Modelsevializer

一、serialiver是要自己写字段

多–instence =qweryset–many=True
一个–nscane=Obj–many=Fals

返回
serialiver.data

  • 多字典列表
  • 一个字典

data函数才是真正的序列的过程
instance是django的数据对象,使用data函数后才变成字典的

二.Moddsorialize与数据库里相关

Modelsevializer
dass meta:
model=棋型类名
fiolds=[字段列表] | "all"所有字段
exlude = [字段列表]

注fiecds、elude只能用一个

三、反序列化.

  1. 接收前端数据.
    request.data →是serializer处理后返回的字典列表(字典)
    reguest.user→是serializer处理后返回用户信息
    regwese.owth→是serializer处理后返回用户信息,但代有token
  2. 反序列化
    ① serialiver(data=reguest.data)
    注:instanee是序列化,data是反序列化.
    ②对一个对象反序列化
    Serializer(instance=obj,data=request.data)
    ③验证(验证传过来的数据是否有效)
    ④sorializor.is_valid()
  • 错误 serialiver.errors
  • 正确 serializer.validated_deta
    保存(写入数据库的过程)
    (
    smrializer.save()
  • update() →添加
  • create()→增加

关键性代码:类. objects.filter( …).updare(**seiadizer.validated-data)→近回更新条数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值