drf框架之mixins(代码片段)

xiaogongjin xiaogongjin     2022-12-07     435

关键词:

一、ListModelMixin

  • 提供list(request, *args, **kwargs)方法
  • 获取已存在的列表数据(获取多条记录)
  • 获取成功,则返回200 OK

1.引入方式

from rest_framework.mixins import ListModelMixin

2.源码对比

技术图片

我们可以发现,两处的代码基本一致,因此我们直接拿到使用来优化本地代码

3.使用方法

a.视图类继承ListModelMixin

b.get方法中直接return self.list(request, *args, **kwargs)

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

二、CreateModelMixin

  • 提供create(request, *args, **kwargs)方法
  • 创建新的模型实例(创建新的记录)
  • 创建成功,返回201 Created
  • 如果请求参数有误,返回400 Bad Request

1.引入方式

from rest_framework.mixins import CreateModelMixin

2.源码对比

技术图片

依然也是基本一致

3.使用方法

a.视图类继承CreateModelMixin

b.post方法中直接return self.create(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

三、RetrieveModelMixin

  • 提供retrieve(request, *args, **kwargs)方法
  • 获取已存在的详情数据(一条记录)
  • 获取成功,返回200 OK
  • 如果不存在,则返回404 Not Found

1.引入方式

from rest_framework.mixins import RetrieveModelMixin

2.源码对比

技术图片

3.使用方法

a.视图类继承RetrieveModelMixin

b.get方法中直接return self.retrieve(request, *args, **kwargs)

    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

四、UpdateModelMixin

  • 提供update(request, *args, **kwargs)方法,用于全更新
  • 提供partail_update(request, *args, **kwargs)方法,用户部分更新,支持PATCH方法
  • 更新已存在的模型实例(更新一条记录)
  • 更新成功,返回200 OK
  • 如果请求参数有误,返回400 Bad Request
  • 如果不存在,返回404 Not Found

1.引入方式

from rest_framework.mixins import UpdateModelMixin

2.源码对比

技术图片

注:这里有一点不一样,源码中有一个‘partial’,这个表示可以进行部分更新,因此update方法不仅支持全更新,也可以支持部分更新

3.使用方法

a.视图类继承UpdateModelMixin

b.put方法中直接return self.retrieve(request, *args, **kwargs)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

五、DestroyModelMixin

  • 提供destroy(request, *args, **kwargs)方法
  • 删除一条已存在的数据(删除一条记录)
  • 删除成功,返回204 No Content
  • 如果不存在,返回404 Not Found

1.引入方式

from rest_framework.mixins import DestroyModelMixin

2.源码对比

技术图片

3.使用方法

a.视图类继承DestroyModelMixin

b.delete方法中直接return self.retrieve(request, *args, **kwargs)

    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)

 

drf框架之serializers序列化组件(代码片段)

...学了序列化工具json工具,就是吧信息存为类字典形式2.DRF框架自带序列化的工具:serializers 3.DRF框架serializers分为:第一种Serializer 第二种ModelSerializer 第一种用法之Serializerfromdjango.dbimportmodels#Createyourmod 查看详情

drf框架serializer之视图优化(代码片段)

一、create优化在serializer序列化中,我们通过创建序列化器对象的方式大大地简化了视图函数的代码,前端传入的数据通过反序列化操作进行了各种数据校验,代码如下:fromdjango.httpimportJsonResponsefromdjango.viewsimportViewfromdjango.dbimpor... 查看详情

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

...性,因此会选择一种更为简洁的序列化器类来帮我们优化框架代码,简化序列化器类中字段的创建常规序列化器类示例:fromrest_frameworkimportserializersfromrest_frameworkimpo 查看详情

drf框架之自定义action(代码片段)

一、自定义action使用action装饰器methods支持的请求方式,为一个列表,默认为[‘get‘]detail必传参数,要处理的是否是详情资源对象(即是否通过url路径获取主键)True表示需要传递主键id,使用通过URL获取的主键对应的数据对象Fal... 查看详情

drf框架之用户登录状态保持(代码片段)

   本篇主要介绍用户状态保持的两种的方案--session和jwt_token,以及这两种方案的实现方式,及优缺点对比。  引入:HTTP协议是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码进行用户认证... 查看详情

drf框架之路由routers(代码片段)

...到路由表中urlpatterns+=router.urls当我们定义好Routers后,DRF框架会使用Routers为我们自动创建好路由信息,但是自定义的action并不会自动创建路由信息。2.为自定义action自动创建路由信息在视图集中,如果想要让Router自动帮助我们为... 查看详情

drf视图家族(代码片段)

...图类,视图集视图基类:APIView、GenericAPIView视图工具类:mixins包下的五个类(六个方法)工具视图类:generics包下的所有GenericAPIView的子类视图集:viewsets包下的类generics中GenericAPIView使用GenericAPIView基类(基本不会单独使用,了解... 查看详情

drf框架之modelserializer序列化器(代码片段)

ModelSerializer是Serializer的子类,序列化和反序列化跟Serializer一样。ModelSerializer与常规的Serializer相同,但提供了:基于模型类自动生成一系列字段基于模型类自动为Serializer生成validators,比如unique_together包含默认的create()和update()的... 查看详情

drf框架之serializer序列化器的序列化操作(代码片段)

在DRF框架中,有两种序列化器,一种是Serializer,另一种是ModelSerializer.今天,我们就先来学习一下Serializer序列化器。使用Serializer序列化器的开发步骤:1.定义Serializer序列化器首先,我们要在子应用中,创建见一个serializers.py文件... 查看详情

drf框架之基础配置(代码片段)

Vue框架的总结"""1、vue如果控制html在html中设置挂载点、导入vue.js环境、创建Vue对象与挂载点绑定2、vue是渐进式js框架3、vue指令v-text|html=>限制一次性渲染v-oncev-if|showv-ifv-else-ifv-elsev-forv-modelv-bind[c1,c2]|active:isActivev-onfn|fn(...)|fn($eve... 查看详情

django-rest-framework---总结(代码片段)

目录drf回顾总结drf基础1.drf框架安装2.接口3.restful接口规范4.基于restful规范的原生Django接口drf五大模块1.请求模块:request对象2.渲染模块:浏览器和Postman请求结果渲染数据的方式不一样3.解析模块4.异常模块5.响应模块序列化组件... 查看详情

drf之jwt补充(代码片段)

DRF之JWT补充1.JWT控制用户登录后才能反问,匿名用户无法访问classQueryUserView(GenericViewSet,RetrieveModelMixin):"""查询接口"""queryset=User.objects.all()serializer_class=UserSerializerpk=None#thrott 查看详情

dart语法篇之面向对象继承和mixins(代码片段)

...文章中我们继续探索Dart中面向对象的重点和难点(继承和mixins).mixins(混合)特性是很多语言中都是没有的。这篇文章主要涉及到Dart中的普通继承、mixins多继承的形式(实际上本质并不是真正意义的多继承)、mixins线性化分析、mixins类... 查看详情

vue之mixins的使用(代码片段)

mixins:是指混入对象,多个组件同时使用相同的变量和方法的时候,可以定义一个混入对象,可以减小代码的重复率,   一个混入对象可以包含任意组件选项,同一个生命周期,混入对象会比组件的先执行。一、main.js中全局... 查看详情

drf之渲染(代码片段)

实例:#路由fromdjango.conf.urlsimporturl,includefromapp01.viewsimportTestViewurlpatterns=[url(r'^test/$',TestView.as_view()),url(r'^test.(?P<format>[a-z0-9]+)',TestView.as_view()),]# 查看详情

drf的搜索和排序(代码片段)

一、搜索classGoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet):‘商品列表页‘#这里必须要定义一个默认的排序,否则会报错queryset=Goods.objects.all().order_by(‘id‘)#分页pagination_class=GoodsPaginationserializer_class=GoodsSerializerfilter_backends=(Djan... 查看详情

drf之序列化(代码片段)

目录准备事项序列化组件初见序列化字段ModelSerializer重载create方法单条数据处理现阶段代码准备事项#models.pyfromdjango.dbimportmodelsclassPublisher(models.Model):title=models.CharField(max_length=32)address=models.CharField(max_length=128)d 查看详情

drf之过滤器详解(代码片段)

drf之过滤详解其实也没有多详,只是觉得这个功能可能很好用,就稍微学细一些,继续学习之后可能会被其他更好用的知识替代吧文章部分来自https://zhuanlan.zhihu.com/p/110060840类似在视图中操作模型的filter,不过drf提供了过滤组件... 查看详情