首先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. MongoDB学习笔记五:聚合

    『count』count是最简单的聚合工具,返回集合中的文档数量:> db.foo.count()0> db.foo.insert({"x" : 1})> db. ...

  2. 用程序获取 Internet 时间 无通用性程序后的暂用办法

    并不是完全失败,但没找到一个通用的办法,这个通用指的不能通用所有的时间服务器,而不是说操作系统. 网上的方案很多,有用Socket类.或TcpClient类(C#).或UdpClient类,端口有使用 ...

  3. Python之路,day8-Python基础

    ***面向对象的好处*** 更容易扩展.提高代码使用效率,使你的代码组织性更强,更清晰 更适合复杂项目的开发 封装 把功能的实现细节封装起来,只暴露调用接口 继承 多态 接口继承 定义 类----&g ...

  4. CommittableTransaction和TransactionScope

    创建可提交事务 下面的示例创建一个新的 CommittableTransaction 并提交它. //Create a committable transaction tx = new Committ ...

  5. SSL安全证书-概念解析

    一.关于证书 数字证书是一种认证机制.简单点说,它代表了一种由权威机构颁发授权的安全标志. 由来 在以前,传统网站采用HTTP协议进行数据传输,所有的数据几乎都用的明文,很容易发生隐私泄露.为了解决安 ...

  6. t2712:字符串移位包含问题

    t2712:字符串移位包含问题   总时间限制:1000ms  内存限制:65536kB描述    给定两个字符串s1和s2,要求判定其中一个字符串    是否是另一字符串通过循环移位后的子字符串.例 ...

  7. mysql开启登录日志和sql日志 排查错误

    首先看是否开启了日志 show global variables like '%general%'; set global general_log = on; // 打开 set global gen ...

  8. 关于无法使用xx-pc附加到应用程序iisexpress.exe

    问题表现:1.本地调试F5不能调试 2.IIS调试 附加到进程 提示无法访问 解决方法: 用管理员身份在cmd中运行:netsh winsock reset,然后重启.

  9. vlc 在ie11 中的addEventListener事件不触发

    在vlc控件中触发一事件,在IE11之前的版本使用attachEvent注册一个回调函数后IE11可以捕获到事件,但IE11中提示attachEvent不支持.经查询发现IE11已经去掉了attach ...

  10. C# 字符串 数据类型 判断 与特定规则验证

    验证字符串格式 1)判断字符串是否是常见数据类型,decimal,foalt,double,datetime,int等等 2)验证字符串符合特定规则    (1)邮箱地址,IP地址     (2)纯数 ...