modelserializer类序列操作(代码片段)

shaozheng shaozheng     2023-05-01     715

关键词:

ModelSerializer类序列化

mysql配置:

#settings.py
DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'drf_jp',
        'USER': 'root',
        'PASSWORD': '155345',
        'CHARSET': 'utf8',
    


# 配置 mysql 代替 : mongdb  (可用于各个app)
import pymysql
pymysql.install_as_MySQLdb()

单表序列化与反序列化操作:


ModelSerializer类序列化与反序列化总结:
        
1)序列化类继承ModelSerializer,所以需要在配置类Meta中进行配置
2)model配置:绑定序列化相关的Model表
3)fields配置:采用 插拔式 设置所有参与序列化与反序列化字段
4)extra_kwargs配置:
    划分系统字段为三种:只读(read_only)、只写(write_only)、可读可写(不设置)
    字段是否必须:required
    选填字段:在extra_kwargs进行配置,但不设置required,且有默认值
5)自定义序列化字段:
    第一种(不提倡):在序列化类中用SerializerMethodField()来实现
    第二种(提倡):在模型类中用@property来实现,可插拔
6)自定义反序列化字段:
    同Serializer类,且规则只能在此声明中设置,或是在钩子中设置,在extra_kwargs中对其设置的无效
    自定义反序列化字段与系统字段,设置规则一样,所以必须设置 write_only
7)局部钩子,全局钩子同Serializer类
8)不需要重写create和update方法

ModelSerializer类序列化与反序列化:

反序列化中增加了条件的筛选:

1.类的字段值应用在反序列化,我们可以在他的字段的属性上加上write_only=True

2raise serializers.ValidationError('异常信息') #抛出异常

3.attrs是所有字段的一个类似字典的集合

4.user_ser.is_valid():  # 自定义处理校验成功的逻辑
    
5.user_ser.errors : #自定义返回错误信息
 
class 自定义名称(serializers.ModelSerializer):
    class Meta:
        model=对应的模型
        fields=('参与序列化和反序列的字段1','参与序列化和反序列的字段2')
        #fields='__all__'  为所有字段
        # exclude = ('id', 'is_delete')  # 刨除某些字段
        # depth = 1  # 跨表自动深度(展示外键表的所有字段)   

注意:
    fields与exclude不能共存
    depth不能控制显示字段,与外键相关的表会全部显示出 

put 更新:

 # 更新一个资源
    def put(self, request, *args, **kwargs):
        pk = kwargs.get('pk')
        old_user_query = User.objects.filter(pk=pk, is_delete=False)
        # 没有数据
        if not old_user_query:
            return Response(
                'status': 1,
                'msg': 'update failed',
            )

        user_deser = UserSerializer(instance=old_user_query, data=request.data)
        result = user_deser.is_valid()
        if result:
            new_user_query = user_deser.save()
            new_user_obj = new_user_query.first()
            return Response(
                'status': 0,
                'msg': 'success',
                'result': UserSerializer(new_user_obj).data
            )
        else:
            return Response(
                'status': 1,
                'msg': 'failed',
                'results': user_deser.errors
            )

post 新增:


# 新增一个资源
    def post(self, request, *args, **kwargs):
        user_deser = UserSerializer(data=request.data)

        # raise_exception值为True,当校验失败,直接返回校验失败的错误信息
        # result = user_deser.is_valid(raise_exception=True)
        result = user_deser.is_valid()
        if result:
            new_user_obj = user_deser.save()
            return Response(
                'status': 0,
                'msg': 'success',
                'result': UserSerializer(new_user_obj).data
            )
        else:
            return Response(
                'status': 1,
                'msg': 'failed',
                'results': user_deser.errors
            )

单删:


现在数据都是很重要的一般情况下不会吧数据删除只会做个标记字段其本质还是局部更新

    def delete(self, request, *args, **kwargs):
        pk = kwargs.get('pk')
        if not pk:
            return APIResponse(1, 'pk error')
        user_obj = models.User.objects.filter(pk=pk, is_delete=False).first()
        if not user_obj:
            return APIResponse(1, '删除失败')
        user_obj.is_delete = True
        user_obj.save()
        return APIResponse(0, '删除成功')

模型类序列化器-modelserializer(代码片段)

...列化器1简介2定义3用法1简介drf提供了模型类序列化器:ModelSerializer。作用就是简化对应django模型类的序列化器的定义。ModelsSerializer与常规的Serializer相同,但提供了:基于模型类自动生成一系列字段基于模型类自动为Serializer生成V... 查看详情

序列化模块知识要点(代码片段)

...误流:序列化家族1、serializer类:底层序列化类--了解2、modelserializer类:模型序列化类--核心类3、ListSerializer类:群操作序列化类--辅助类models.py中注意事项:Serializer序列化(了解)drf序列化过程视图类序列化过程:视图类反序列化... 查看详情

09.drf-modelserializer(代码片段)

四、模型类序列化器ModelSerializer如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。ModelSerializer与常规的Serializer相同,但提供了:基于模型类自动... 查看详情

modelserializer组件(代码片段)

ModelSerializer组件一、DRF模型类序列化器如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。ModelSerializer与常规的Serializer相同,但提供了:基于模型... 查看详情

drf序列化(代码片段)

目录序列化家族SerializerModelSerializerListSerializerSerializer序列化(了解)视图类序列化类Serializer反序列化(了解)视图类序列化类ModelSerializer序列化和反序列化(重点)视图类序列化类模型类序列化家族Serializer底层序列化重点:单表... 查看详情

django-rest-framework-从零开始-3-序列化类modelserializer的使用(代码片段)

django-rest-framework-从零开始-3-序列化类ModelSerializer的使用1、前言我们之前提到创建序列化类,需要继承serializers.Serializer类,然后映射模型类的字段,然后重写create方法和update方法。这样的代码,看起来映射字段有一些重复代码,... 查看详情

drf框架serializer之modelserializer(代码片段)

一、基本语法在没有使用ModelSerializer序列化器类之前,我们定义的序列化器类都需要添加对应模型类字段的很多字段,如果添加的字段特别多,那么势必会影响开发效率和代码的可读性,因此会选择一种更为简洁的序列化器类来... 查看详情

pythondjangorest_framework框架模型类序列化器(modelserializer)详解(图文并茂版)(代码片段)

模型类序列化器(ModelSerializer)详解介绍区别与优点定义模型类序列化器查看生成的模型序列化器使用模型类序列化器模型序列化器字段介绍上篇文章我们介绍了最基础的序列化器(serializers),pythonDjangoRest_Framework框架... 查看详情

模型类序列化器(代码片段)

模型类序列化器DRF提供了模型类序列化器:ModelSerializer作用:简化对应django模型类的序列化器的定义ModelSerializer与常规的Serializer相同,但提供了:基于模型类自动生成一系列字段基于模型类自动为Serializer生成validators,比如字段... 查看详情

drf---序列化(代码片段)

...、Serializer类:底层序列化类-了解类重点:单表序列化2、ModelSerializer类:模型序列化类-核心类重点:多表序列化3、ListSerializer类:群操作序列化类-辅助类重点:辅助完成单表多表群增群改操作" 查看详情

drf的序列化器(代码片段)

...库操作.序列化家族Serializer类,底层是序列化类,(了解原理)ModelSerializer类,模型序列化类(核心)ListSerializer类:群操作序列化类(辅助类)手动序列化前后端交互,通过json格式文件进行传输,使用djangoORM语句将对象从数据库中找出来进行交... 查看详情

drf-五大方法(重要)(代码片段)

序列化类#BookListSerializer是BookModelSerializer子序列化类classBookListSerializer(serializers.ListSerializer):#自定义的群增群改辅助类,没有必要重写create方法defcreate(self,validated_data):returnsuper().create(validated_data)#获取视图类中的validated_data_list进... 查看详情

12子序列化(代码片段)

...ers.pyfromrest_frameworkimportserializersfrom.importmodelsclassAuthorDetailModelSerializer(serializers.ModelSerializer):classMeta:model=models.AuthorDetailfields=['phone']classBookModelSerializer(serializers.ModelSerializer):classMeta:m 查看详情

drf图片字段序列化完整路径(代码片段)

...des,area_detail,但结构如下:classChrDetailSerializer(serializers.ModelSerializer):"""年代地层详情序列化"""classMeta:model=Address_Lisfields=(‘region‘,)classLisDetailSerializer(serializers.ModelSerializer):"""岩石地层序列化"""parent_categry=ChrDetailSerializer()classMeta... 查看详情

django框架(十九)——序列化组件(serializer)(代码片段)

...本语法2、基于Serializer类实现序列化——高级语法3、基于ModelSerializer类实现序列化序列化组件#模型层fromdjango.dbimportmodelsclassBook(models.Mod 查看详情

drf序列化组件(代码片段)

...izer序列化总结:Serializer反序列化Serializer反序列化总结:ModelSerializer序列化与反序列化ModelSerializer序列化与反序列化总结:在视图中手动完成序列化操作#view.pyclassUserV1ApiView(APIView):defget(self,request,*args,**kwargs):pk=kwargs.get('pk')... 查看详情

验证器(validators)(代码片段)

...关注点分离,使您的代码行为更加明显。使用快捷的 ModelSerializer 类和使用显式的 Serializer 类可以轻松切换。任何用于 ModelSerializer的验证行为都很容易复制。打印序列化器实例的 repr 将准确显示它应用... 查看详情

drf高级五modelserializer(代码片段)

...。fromrest_frameworkimportserializersclassProductSerializer(serializers.ModelSerializer):classMeta:model=Productfields=__all__#exclude=(created,)#read_only_fields=(email,)指定只读字段#extra_kwargs=created:write_only:TrueMeta属性指定字段—fields__all__指模型下所有字段元组或... 查看详情