美文网首页
第七章、mixin详解

第七章、mixin详解

作者: zhaodianle | 来源:发表于2018-04-09 13:44 被阅读0次

导读

在第五章 views 解读时,我们已经详细解读了 http 方法对应的处理函数,但是却没发现这些处理函数在哪。
从样例中,我们找到样例的 View 继承自 ModelViewSet,那么顺着 ModelViewSet,我们发现了 mixin 下的几个类,可能就是我们想要的结果。

这一章的例子有点多,我挑选2~3个样例解决,get 方法对应的 list函数(get 方法还可以对应 retrieve 函数,需要 url 控制),post 方法对应的 create 函数,以及 delete 方法对应的 destroy 函数

ListModelMixin

class ListModelMixin(object):
    """
    List a queryset.
    """
    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

list 函数的主要流程就是调用 get_queryset, filter_queryset, 再分页 paginate_queryset,再通过 serializer 进行序列化,最后返回结果。

对于 queryset 的操作,我们发现 rest_framework 的样例中,就有queryset,那么我们到这里,其实已经完全将 rest_framework 的请求流程全部走通了,剩下的,我们再细化一些细节。

CreateModelMixin

class CreateModelMixin(object):
    """
    Create a model instance.
    """
    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

    def perform_create(self, serializer):
        serializer.save()

    def get_success_headers(self, data):
        try:
            return {'Location': data[api_settings.URL_FIELD_NAME]}
        except (TypeError, KeyError):
            return {}

同理,在调用 create 函数时,也是调用了 perform_create 函数,perform_create 函数,也是我们也样例,经常覆盖的函数,以正确处理业务逻辑。

结尾

这一章,我们连贯了 http 方法对应的函数处理,并了解到了这些处理函数到底做了些什么内容。目前的几章,我们已经将 rest_framework 的主要处理流程都走通了。接下来,我们看一下 queryset与serializer 如何对数据进行序列化。
其他旁枝末节的知识点,也将陆陆续续补充,但是已经不影响我们在rest_framework下的编程了。

相关文章

  • 第七章、mixin详解

    导读 在第五章 views 解读时,我们已经详细解读了 http 方法对应的处理函数,但是却没发现这些处理函数在哪...

  • 【第8篇】TypeScript的Mixin案例代码详解

    1、Mixin使用 Ts代码 Js代码 工程源代码 TypeScript的Mixin案例代码详解 博客所有文章是本...

  • JavaScript继承详解(Mixin)

    上一篇JavaScript继承详解(Klass)介绍了各种继承的模式。但究竟为何要继承?一个很重要的目的就是为了代...

  • Dart-Mixin详解

    在开始阅读此篇文章之前,我们可以先思考下如下问题: 1.什么是 Mixin ?2.Mixin为什么会被设计出来,它...

  • vue混入(mixin)的详解

    混入(mixin)提供了一种非常灵活的方式,来分发vue组件中的可复用功能。一个混入对象可以包含任意组件选项。当组...

  • 【译文】关于Mixin

    文章来源:Mixin 主页https://mixin.one/xin About Mixin Mixin is a...

  • 混合 mixin

    定义mixin 通过@include 名字 调用mixin mixin使用参数

  • MIXIN 白皮书连载之域解读

    Mixin 域 (Mixin Domain)Mixin 域为 Mixin 内核提供资产的分布式账本。这些资产可以是...

  • SCSS

    变量 mixin mixin 基本用法 mixin 传一个参数 mixin 传多个参数 extend 基础知识 简...

  • Vue mixin 混入及自定义Vue插件

    一、mixin混入 mixin即合并公共方法: 可以设置通用的方法或者变量外部mixin 如下:全局mixin:V...

网友评论

      本文标题:第七章、mixin详解

      本文链接:https://www.haomeiwen.com/subject/ubdjfftx.html