首先django-restframework是基于django的一个框架。
 
mixins.py中开头是这样写的:
Basic building blocks for generic class based views.
We don't bind bahaviour to http method handlers yet, whick allows mixin classes to be composed in interesting ways.
 
generics是把对数据库的增删改查都放在一起了。
 
对数据的查找是调用了django框架里面的函数。
 
===============================================================
generics.py总体结构
 
"""
Generic views that provide commonly needed behaviour.
"""
 
import ....
 
def get_object_or_404
class GenericAPIView
     """
     Base class for all other generic views.     增删改查的基类,要注意下面增删改查的还有一个基类就是mixins.*
     """
     def get_queryset
     def get_objects
     def get_serializer
     def get_serializer_class
     def get_serializer_context
     def filter_queryset
     def paginator
     def paginate_queryset
     def get_paginated_response
 
class CreateAPIView     增
class ListAPIView     查
class RetrieveAPIView     查       
class DestroyAPIView     删
class UpdateAPIView     改
class ListCreateAPIView     查     增
class RetrieveUpdateAPIView     查     增
class RetrieveDestroyAPIView     查     删
class RetrieveUpdateDestroyAPIView     查     改     删
 
=====pk的问题==============================
关于pk的问题,默认是pk,如果用了pk,直接就可以过滤也不用去获取这个参数,那不用pk为什么就要去获取参数呢?不用pk也不获取行不行呢? 让我们来看
class GenericAPIView(Views.APIView):
     lookup_field = 'pk'
     def get_object(self):
          lookup_url_kwarg = self.look_url_kwarg or self.lookup_field
          filter_kwargs = { self.lookup_field: self.kwargs[lookup_url_kwarg]}
          obj = get_object_or_404(queryset, **filter_kwargs)
          return obj
答案是不行!
由此我们可以看出来pk是写死在代码里面的,至于为什么是pk,不是rk,可能是源代码开发人员喜欢玩传奇。。。调侃一下,不要在意
 
而且我们也能看出来,在url里面只能有一个参数。不可以加多个参数。这个问题也要注意。
 
注:这上面的代码不是全部代码,我只是把与pk有关的提取出来写出来。
 
=================================================================
我在mixins.py里面看到一个函数调用:
class RetrieveModelMixin(object):
     """
     Retrieve a model instance.
     """
     def retrieve(self, request, *args, **kwargs):
          instance = self.get_object()
          serializer = self.get_serializer(instance)
          return Response(serializer.data)
我们可以看到这段代码用了get_object()可是我在mixins.py里面没有看到这个函数定义,然后发现,原来是是在generics.py里面的class GenericAPIView(views.APIView)里面定义了这个函数,还没完,然后紧接着可以看到class RetrieveAPIView(mixins.RetrieveModelMixin, GenericAPIView)
===============================================================
 
这样就可以解释清楚了,这样就可以大致理解了django-restframework中generics.py是怎么一回事。
对于阅读源代码这种事情,根据每个人能力不同理解也不同,感悟也不同,所以还请大神轻喷。
如果哪里有问题请指出来,互相学习,谢谢。

阅读{django-restframework}源码[generics.py]学习笔记的更多相关文章

  1. zepto源码--定义变量--学习笔记

    主要了解一下zepto定义的初始变量. 逐一以自己的理解解析,待到后面完全透彻理解之后,争取再写一遍zepto源码学习的文章. 其中的undefined确实不明白为什么定义这么个变量在这里. docu ...

  2. zepto源码--整体框架--学习笔记

    为了深入学习javascript,根据别人推荐的方法之一:研究源码. 相对而言,之前的项目中仅仅使用过zepto和jquery,当前阶段,看到好几千行的jquery源码,心生敬畏,望而却步,所以选择相 ...

  3. 《Android源码设计模式》学习笔记之ImageLoader

    微信公众号:CodingAndroid cnblog:http://www.cnblogs.com/angel88/ CSDN:http://blog.csdn.net/xinpengfei521 需 ...

  4. 《PHP7底层设计与源码实现》学习笔记1——PHP7的新特性和源码结构

    <PHP7底层设计与源码实现>一书的作者陈雷亲自给我们授课,大佬现身!但也因此深感自己基础薄弱,遂买了此书.希望看完这本书后,能让我对PHP7底层的认识更上一层楼.好了,言归正传,本书共1 ...

  5. .NET 云原生架构师训练营(KestrelServer源码分析)--学习笔记

    目录 目标 源码 目标 理解 KestrelServer 如何接收网络请求,网络请求如何转换成 http request context(C# 可识别) 源码 https://github.com/d ...

  6. stl源码剖析 详细学习笔记 hashtable

    //---------------------------15/03/24---------------------------- //hashtable { /* 概述: sgi采用的是开链法完成h ...

  7. 关于OPC的研究1]c# opc client源码调试和学习笔记

    c# opc client是一个在网上下载的示例程序,调试的时候还是费了一番周折,服务器端程序来自king view6.55,另文介绍. 1.注册dll 程序中有一个名叫OPCDAAuto.dll的文 ...

  8. zepto源码--插入节点--学习笔记

    与生成width和height使用的方法类似,通过`after`, `prepend`, `before`, `append`,这四者之间的共性,生成对应的函数.并根据这四个函数,生成 `insert ...

  9. stl源码剖析 详细学习笔记 空间配置器

    //---------------------------15/04/05---------------------------- /* 空间配置器概述: 1:new操作包含两个阶段操作 1>调 ...

随机推荐

  1. kickstart+ftp+tftp+dhcp+PXE

    ##########yum less install.log #看安装log yum install system-config-kickstart* -y yum install tftp* -y ...

  2. 13、java中的多态

    1,多态的体现 父类的引用指向了自己的子类对象. 父类的引用也可以接收自己的子类对象.2,多态的前提 必须是类与类之间有关系.要么继承,要么实现. 通常还有一个前提:存在覆盖. 3,多态的好处 多态的 ...

  3. svn 权限配置

    svnserve.conf开启权限 auth中以下设置 重启SVN服务

  4. ruby HTTPS请求

    require 'uri'require 'net/http'require 'net/https' @toSend = { "date" => "2012-07- ...

  5. 关于Windows2008服务器设置MIME后仍然无法播放MP4的解决方法

    最近遇到了一个非常邪门的故障,重新安装了Windows2008服务器后 Mp4无法正常播放: 整个互联网中关于设置MP4的方法基本都是教你如何在IIS中设置MIME 本文讨论的不是如何教你设置MIME ...

  6. asp.net下出现其中的组件“访问被拒绝”的解决方法

    一.一般情况下,对该组件重新授权即可.附上ASP,NETWORK SERVICE用户的可修改权限. 二.其中最常见的原因是Indexing service服务引起的.解决方法就是停用Indexing  ...

  7. 【学】jQuery的源码思路4——增加一些功能

    本文说一些简单的jQuery实现原理 eq() get() hide() show() index() find() //返回找到的一组元素中的第n个 zQuery.prototype.eq=func ...

  8. Android学习笔记(十)

    Android控件——ListView ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时 屏幕上原有的数据则会滚动出屏幕. 1.ListView的简单用法 新建一个Lis ...

  9. 解析JDK 7的动态类型语言支持

    http://www.infoq.com/cn/articles/jdk-dynamically-typed-language

  10. git学习:忽略部分文件

    第二部分:自定义Git 有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件,数据库文件,图片等等,每次git status都会显示Untracked fi ...