首先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. android NDK debug 遇到的问题与解决方法

    最近在研究android  NDK 的eclipse调试,遇到点问题,总结一下: 1.Unknown Application ABI :在application.mk里面添加APP_PLATFORM ...

  2. linux 下如何抓取HTTP流量包(httpry)

    基于某些原因你需要嗅探HTTP Web流量(即HTTP请求和响应).例如,你可能会测试Web服务器的性能,或者x奥uy调试Web应用程序或RESTful服务 ,又或者试图解决PAC(代理自动配置)问题 ...

  3. unity, 按类型查找文件

  4. Eclipse启动tomcat时出现报错-拒绝访问

    今天新建项目,当选择项目的发布路径为tomcat的路径时 启动tomcat出现如下错误: Publishing the configuration... Error copying file to D ...

  5. PHP MVC简单介绍,对PHP当前主流的MVC做了一个总结

    东抄西抄,对PHP当前主流的MVC做了一个总结PPT. 希望对初学者有点帮助! PHP MVC初步.ppt

  6. asp.net中使用基于角色role的Forms验证

    http://www.cnblogs.com/yao/archive/2006/06/24/434783.html asp.net中使用基于角色role的Forms验证,大致经过几下四步:1.配置系统 ...

  7. Android数据库的运用

    很简单的应用,所以我直接简单明了.     android中数据库的运用:    1.定义类继承SQLiteOpenHelper   ps:   public class DBHelper exten ...

  8. 升级Win2010后, 打开SQL2008 附加数据库提示 5120错误

    在win2010系统上使用sql2008进行附加数据库(包括在x86系统正在使用的数据库文件,直接拷贝附加在X64系统中)时,提示无法打开文件,5120错误. 这个错误是因为没有操作权限,所以附加的时 ...

  9. Angular.JS学习笔记——1

    内容来自:http://www.runoob.com/angularjs/angularjs-intro.html AngularJS 是一个 JavaScript 框架.它是一个以 JavaScri ...

  10. ruby HTTPS请求

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