返回顶部
首页 > 资讯 > 精选 >如何使用ModelSerializer和Mixin
  • 352
分享到

如何使用ModelSerializer和Mixin

2023-06-02 06:06:05 352人浏览 薄情痞子
摘要

这篇文章主要介绍如何使用ModelSerializer和Mixin,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用serializers.ModelSerializer之前我们学了serializers模块中Ser

这篇文章主要介绍如何使用ModelSerializer和Mixin,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

使用serializers.ModelSerializer

之前我们学了serializers模块中Serializer类的使用,现在我们来学习一下如何使用Django中的serializers.ModelSerializer类替换之前的serializers.Serializer类
上一章我们是在Schools APP中的serializer.py中编写的代码吧,我们先看一下之前的代码

from rest_framework import serializersfrom .models import Schoolclass SchoolSerializer(serializers.Serializer):    name = serializers.CharField()    desc = serializers.CharField()    location = serializers.CharField()    create_time = serializers.DateTimeField(default=datetime.now,)    course_numbers = serializers.IntegerField()    def create(self, validated_data):        """        Create and return a new `Snippet` instance, given the validated data.        """        return School.objects.create(**validated_data)

我们定义了一个SchoolSerializer类,继承了serializers.Serializer类,然后在其中定义了5个字段对吧,那我们来看一下如何把serializers.Serializer类替换成serializers.ModelSerializer类吧

class SchoolSerializer(serializers.ModelSerializer):    class Meta:        # 指定需要序列化的Model        model = School            # 指定需要序列化的Model中的字段        fields = ('name', 'desc')        # 序列化所有的字段        fields = '__all__'    def create(self, validated_data):        """        Create and return a new `Snippet` instance, given the validated data.        """        return School.objects.create(**validated_data)

看上面代码可以看出,可以使用fields指定需要序列化的Model中的字段,可以指定一个、两个..或者所有字段,如果我们要指定序列化所有字段我们可以使用fields = '__all__'
我们先来看一下如果序列化两个字段是什么样子fields = ('name', 'desc')

如何使用ModelSerializer和Mixin

再来试一下序列化所有字段是什么样子:fields = '__all__'

如何使用ModelSerializer和Mixin

通过代码我们可以得出结论,也就是使用serializers.ModelSerializer类代替serializers.Serializer类,也就是让schools app中SchoolSerializer类继承serializers.ModelSerializer类,能够让代码更加简洁,也更加方便;

使用mixins.ListModelMixin

mixins可以实现类功能或者函数功能增强,能够动态的增加函数的一些属性和方法,DRF库中有很多功能增强的mixin,

  • ListModelMixin:列表视图扩展类,提供list(request, args, *kwargs)方法快速实现列表视图,返回200状态码,该Mixin的list方法会对数据进行过滤和分页;

  • GenericapiView:继承自APIVIew,增加了对于列表视图和详情视图可能用到的通用支持方法,queryset为列表视图的查询集,serializer_class为视图使用的序列化器;
    那现在我们编辑APP中的views.py文件, 重写AllSchoolsView类

class AllSchoolsView(mixins.ListModelMixin,generics.GenericAPIView ):    """    这是AllSchoolsView的返回结果    """    # queryset、serializer_class是固定的    queryset = School.objects.all()    serializer_class = SchoolSerializer    def get(self, request, *args, **kwargs):        return self.list(request, *args, **kwargs)

访问接口的效果和之前是一眼的,但是代码却比未修改之前要少,我们来看一下

如何使用ModelSerializer和Mixin

使用generics.ListAPIView简化AllSchoolsView

我们通过查看ListAPIView的继承关系能够看到ListAPIView继承mixins.ListModelMixin和GenericAPIView:

class ListAPIView(mixins.ListModelMixin, GenericAPIView):

修改一下AllSchoolsView的继承关系,我们发现如果让AllSchoolsView继承generics.ListAPIView,访问接口的效果和之前也是一样的,甚至可以省略get方法,
因为ListAPIView类自带一个get方法,如此可以更加的简洁代码了。就不放效果图了,和上面的图一样;

class AllSchoolsView(generics.ListAPIView):    """    这是AllSchoolsView的返回结果    """    # queryset、serializer_class是固定的    queryset = School.objects.all()    serializer_class = SchoolSerializer    # def get(self, request, *args, **kwargs):        # return self.list(request, *args, **kwargs)

在rest_framework库下的generics.py中有很多封装好的View

如何使用ModelSerializer和Mixin

这里的规律是Create表示添加,Retrieve表示操作一条数据,List表示操作多条数据,Destroy表示删除,Update表示更新。

  • ListCreateAPIView:用于post提交之后添加多条数据

  • RetrieveAPIView:用于返回一条数据

  • ListAPIView:用于返回一个表的数据,或多条数据

  • CreateAPIView:添加一条数据

以上是“如何使用ModelSerializer和Mixin”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 如何使用ModelSerializer和Mixin

本文链接: https://lsjlt.com/news/229152.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用ModelSerializer和Mixin
    这篇文章主要介绍如何使用ModelSerializer和Mixin,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用serializers.ModelSerializer之前我们学了serializers模块中Ser...
    99+
    2023-06-02
  • Serializer和ModelSerializer如何使用
    这篇文章主要为大家展示了“Serializer和ModelSerializer如何使用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Serializer和ModelSerializer如何使用”...
    99+
    2023-06-02
  • 如何进行vue中mixin的使用
    这期内容当中小编将会给大家带来有关如何进行vue中mixin的使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。vue之mixin的使用作用:在引入组件之后,则是将组件内部的内容如data等方法、meth...
    99+
    2023-06-21
  • python中Mixin混入类如何使用
    这篇文章主要讲解了“python中Mixin混入类如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中Mixin混入类如何使用”吧!前言最近在看sanic的源码,发现有很多M...
    99+
    2023-07-02
  • scss中使用mixin不生效如何解决
    scss中使用mixin不生效如何解决,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。mixin方法:浏览器无法编译:以前旧版sass是支持上面写法,现在新版后不支持,传入变...
    99+
    2023-06-08
  • 在 Typescript中如何使用可被复用的 Vue Mixin功能
    小编给大家分享一下在 Typescript中如何使用可被复用的 Vue Mixin功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!转到用 Typescript 写 Vue 应用以后,经过...
    99+
    2024-04-02
  • vue混入mixin使用特点
    目录什么是混入创建Mixins使用Mixins在组件(Home.vue)中使用mounted生命周期钩子选项合并可复用性全局混入注意什么是混入 混入 (mixin) : 是一种分发V...
    99+
    2022-12-22
    vue混入mixin vue混入mixin原理
  • vue3  mixin 混入使用方法
    目录一、mixin 如何使用 ?二、mixin 使用时注意点2.1、使用 mixin 对象时,组件内部和 mixin 包含相同选项,如何处理呢?2.2、使用的 mixin 对象选项 ...
    99+
    2024-04-02
  • 详解vue之mixin的使用
    目录vue之mixin的使用mixin之中的data数据访问mixin / index.jsHome.vueAbout2.vuemixin中的 methods方法和computed使...
    99+
    2024-04-02
  • VUE mixin 使用示例详解
    目录mixin 混入组件 data 优先级高于 mixin data 优先级2 mixin 生命周期优先级mixin 中的生命周期函数和组件的生命周期函数都会执行,而且 mixin ...
    99+
    2022-11-13
    VUE mixin 使用 VUE mixin
  • C#中的Mixin怎么使用
    这篇文章主要介绍“C#中的Mixin怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#中的Mixin怎么使用”文章能帮助大家解决问题。从一个简单例子说起试想我们在写一个游戏引擎,创建如下类:...
    99+
    2023-06-30
  • 如何理解JavaScript的Mixin模式
    本篇文章为大家展示了如何理解JavaScript的Mixin模式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 在 JavaScript 中,我们只能继承...
    99+
    2024-04-02
  • Vue中Mixin&extends的详细使用教程
    目录认识Mixin官方定义Mixin项目中如何使用Mixin官方定义extends项目中使用extends总结认识Mixin 目前我们使用组件化开发方式来开发应用程序,但是在不同组件...
    99+
    2024-04-02
  • Vue组件化ref,props, mixin怎么使用
    这篇文章主要介绍“Vue组件化ref,props, mixin怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue组件化ref,props, mixin怎么使用”文章能帮...
    99+
    2023-06-30
  • scss使用mixin不生效怎么解决
    这篇文章主要介绍“scss使用mixin不生效怎么解决”,在日常操作中,相信很多人在scss使用mixin不生效怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”scss使用mixin不生效怎么解决”的疑...
    99+
    2023-07-04
  • vue3的mixin混入使用方法是什么
    本篇内容主要讲解“vue3的mixin混入使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue3的mixin混入使用方法是什么”吧!vue 2 中采用选项式API 如: ...
    99+
    2023-06-21
  • python 中Mixin混入类的使用方法详解
    目录前言Mixin 与继承的区别总结前言 最近在看sanic的源码,发现有很多Mixin的类,大概长成这个样子 class BaseSanic(    RouteMixin,  ...
    99+
    2024-04-02
  • vuejs中怎么使用mixin局部混入与全局混入
    这篇文章主要介绍“vuejs中怎么使用mixin局部混入与全局混入”,在日常操作中,相信很多人在vuejs中怎么使用mixin局部混入与全局混入问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vuejs中怎么使...
    99+
    2023-06-30
  • 如何使用localStorage和sessionStorage
    这篇文章主要介绍了如何使用localStorage和sessionStorage,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、什么是lo...
    99+
    2024-04-02
  • Node.js和Express如何使用
    本篇文章为大家展示了Node.js和Express如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、 Nodejs简介 ==Node是JavaScript语...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作