DRF框架的使用入门(二)Serializer序列化器/串行器

本文介绍了如何在DRF中使用Serializer进行数据序列化和反序列化,包括ModelSerializer的自动字段和验证器,以及自定义验证、.create()和.update()方法的实现。此外,还探讨了如何通过shell调试序列化过程,并添加PUT请求以更新数据。文章详细讲解了使用Postman和前端Ajax发送PUT请求的步骤。
摘要由CSDN通过智能技术生成


前文:推荐看官网
环境:版本(django1.11, python3.5),适用于前后端分离项目

先创建serializers.py定义序列化器

现在对应的模块APP创建serializers.py文件:选择一种来使用,推荐用ModelSerializer

用ModelSerializer创建序列化器

和Serializer的不同点,通常用于需要与Django模型定义紧密映射的序列化程序类:

  • 它将根据模型自动为您生成一组字段。
  • 它将自动为序列化程序生成验证器,例如UNIQUE_CONITY验证器。
  • 它会做这两个方法的简单默认实现。.create()和.update().
from rest_framework import serializers
from goods.models import GoodsInfo
# 定义一些序列号程序


class GoodsInfoSerializer(serializers.ModelSerializer):
    # 创建序列化器
    class Meta:
        # 定义元类
        # model指明了当前的序列化器和哪个模型产生联系
        model = GoodsInfo
        fields = '__all__'   # 意思是所有的字段都要
        # 这样写是自己选择需要的字段
        # fields = ('url', 'username', 'email', 'groups')

用shell查看自动生成的内容:

>>> from goods.serializers import *
>>> ser = GoodsInfoSerializer()
>>> ser
GoodsInfoSerializer():
    id = IntegerField(label='ID', read_only=True)
    name = CharField(max_length=50)
    pub_date = DateField(allow_null=True, label='商品发布时间', required=False)
    is_delete = BooleanField(label='逻辑删除', required=False)
    readcount = IntegerField(label='流量', max_value=2147483647, min_value=-2147483648, required=False)
    price = CharField(max_length=10)

用基础类Serializer创建序列化器:

基础类,下文基本使用这个类来进行。

class GoodsInfoNewSerializer(serializers.Serializer):
    # 基础序列化器需要填id,可以设置备注和只读属性
    id = serializers.IntegerField(label='主键', read_only=True)
    name = serializers.CharField(max_length=50)
    price = serializers.CharField(max_length=11)

    # readonly和required只能设置一种
    # 设置外键,required表示在反序列化中必须传递的值
    # addkey = serializers.StringRelatedField(label='外键地址id', required=True)

    # 这个是接收post请求
    def create(self, validated_data):
        return GoodsInfo.objects.create(**validated_data)

在views.py写入内容

from django.shortcuts import render
from django.http import HttpResponse
from rest_framework.viewsets import ModelViewSet
from goods.models import GoodsInfo
from goods.serializers import GoodsInfoSerializer


# Create your views here.

class GoodsInfoView(ModelViewSet):
    # 先导包ModelViewSet和数据库Model和serializers下的类
    # queryset是一个查询集,存储所有的数据库查询之后的数据,是一个属性不能修改名字
    queryset = GoodsInfo.objects.all()
    '''serializer_class用来指定再当前的视图立面进行序列化和反序列化时
    使用的序列化器(也叫串行器)
    '''
    serializer_class = GoodsInfoSerializer
	# 根据需要选择Serializer
   	# serializer_class = GoodsInfoNewSerializer

urls.py写路由逻辑

用的是rest_framework的方法:

from django.conf.urls import url
from goods.views import *
from rest_framework.routers import DefaultRouter


# 定义视图处理的路由器
router = DefaultRouter()
# 在路由器中注册视图集
router.register('goods', GoodsInfoView, base_name='')

urlpatterns = [
    # 要用RSF的定义路由方法
]
urlpatterns += router.urls

用shell来写调试数据库数据序列化查询

在这里插入图片描述

序列化与反序列化

序列化可以理解为:把python的对象编码转换为json格式的字符串,
反序列化可以理解为:把json格式字符串解码为python数据对象

用的官方文档的实例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值