2019-7-5  今日源码: as_view()

CBV与FBV路由区别

urlpatterns = [
url(r'^publish/$', views.Publishs.as_view()), # CBV写法
url(r'^publish/$', views.publish), # FBV写法
]

我们通过看FBV的写法可以得知,这里写的是一个内存地址,路由匹配成功会自动执行

CBV写的是类.as_view(),加括号意味着在项目启动就会执行,那么我们大胆猜测,这里得到的也是一个函数地址。

我们来搂一眼源码:

果然,它返回了一个内存地址,而且是一个闭包函数

也就是说当路由匹配成功的时候会调用内部的view加括号

那我们需要进一步去看view里面干了些什么:

我们发现它调用了dispatch方法,此时的self是我们的视图类对象,那么我们在查找dispatch方法时需要先从自身找,自身我们没有定义,那么此时就向父类找,最终在父类View里面找到了dispatch方法并调用

我们知道了它调用了dispatch方法,那我们来View里看看dispatch里面干了些什么:

if 判断 请求方式是不是属于默认8大请求方式之一,如果是,通过反射,拿到self中定义的请求方法的函数地址

刚才我们说到,self是我们视图类的对象,那么这时候如果我们在视图类中定义了该请求方式同名的方法,那么就会走该方法。

这个时候我们就应该有恍然大悟的感觉了,as_view()最终干的事情就是根据request请求方式来执行视图类的不同请求方法

2. Django每日一码 之as_view() 源码的更多相关文章

  1. Django中CBV View的as_view()源码解析

    CBV与FBV路由区别 urlpatterns = [ url(r'^publish/$', views.Publishs.as_view()), # CBV写法 url(r'^publish/$', ...

  2. 2.CBV和类视图as_view源码解析

    一.FBV和CBV # 视图基于函数开发 FBV: function.base.views # 视图基于类开发 CBV: class .base .views #Python是一个面向对象的编程语言, ...

  3. Django(44)drf序列化源码分析(1)

    序列化与反序列化   一般后端数据返回给前端的数据格式都是json格式,简单易懂,但是我们使用的语言本身并不是json格式,像我们使用的Python如果直接返回给前端,前端用的javascript语言 ...

  4. CBV源码分析+APIVIew源码分析

    {drf,resful,apiview,序列化组件,视图组件,认证组件,权限组件,频率组件,解析器,分页器,响应器,URL控制器,版本控制} 一.CBV源码分析准备工作: 新建一个Django项目 写 ...

  5. spring源码解析——spring源码导入eclipse

    一.前言     众所周知,spring的强大之处.几乎所有的企业级开发中,都使用了spring了.在日常的开发中,我们是否只知道spring的配置,以及简单的使用场景.对其实现的代码没有进行深入的了 ...

  6. [译] 给PHP开发者的PHP源码-第一部分-源码结构

    文章来自:http://www.hoohack.me/2016/02/04/phps-source-code-for-php-developers-ch 原文:http://blog.ircmaxel ...

  7. ios源码-ios游戏源码-ios源码下载

    游戏源码   一款休闲类的音乐小游戏源码 该源码实现了一款休闲类的音乐小游戏源码,该游戏的源码很简单,而且游戏的玩法也很容易学会,只要我们点击视图中的grid,就可以 人气:2943运行环境:/Xco ...

  8. 【转】编译Android系统源码和内核源码

    原文网址:http://blog.csdn.net/jiangwei0910410003/article/details/37988637 好长时间没有写blog了,之所以没有写,主要还是工作上的事, ...

  9. 【转】Android手机客户端关于二维码扫描的源码--不错

    原文网址:https://github.com/SkillCollege/QrCodeScan QrCodeScan 这是Android手机客户端关于二维码扫描的源码,使用了高效的ZBar解码库,并修 ...

随机推荐

  1. Win8 Metro(C#)数字图像处理--2.74图像凸包计算

    原文:Win8 Metro(C#)数字图像处理--2.74图像凸包计算 /// <summary> /// Convex Hull compute. /// </summary> ...

  2. Win10《芒果TV》商店版更新v3.1.3.0:优化应用速度,支持会员卡兑换

    在微软秋季Win10/Surface新品发布会热潮之后,<芒果TV>UWP版迅速更新v3.1.3版,优化应用启动速度,支持会员卡券兑换,新增全网搜索.记忆播放.消息推送等功能. 芒果TV ...

  3. 微信小程序把玩(五)页面生命周期

    原文:微信小程序把玩(五)页面生命周期 这里只要熟悉页面的基本生命周期即可,业务在指定生命周期函数内书写. 以下是官网给出的生命周期函数方法和状态图 上面的生周期函数图对于做Android 或者IOS ...

  4. 微信小程序把玩(一)Hello WeApp

    原文:微信小程序把玩(一)Hello WeApp 本篇默认已经成功安装微信小程序工具 新建项目 AppID查看公众开发平台设置查看(https://mp.weixin.qq.com) 项目名称随意填写 ...

  5. Qt5下OpenGL程序的新写法

    在Qt5中,引入了QOpenGL*系列类,以取代Qt4时代的QGL*系列类. 下面是从Qt5例子中抠出的两种OpenGL程序模板,方便参考. 第一种写法: #ifndef TRIANGLEWINDOW ...

  6. 网易Lofter

    作为老网虫,对网易的感情是很深的.当我知道Lofter这个东西后,曾经很兴奋要好好打理自己的博客,然而兴奋很快过了.因为Lofter无时无刻不在刷存在感.无限空间加无限图片流量,国内的服务无法做的更好 ...

  7. 访问类的私有属性(RTTI和模仿类2种方法)

    如何访问类的私有属性? 下面以 TPathData 为例,它有一个私有属性 PathData,储存了每一个曲线点,但一般无法修改它,需要利用下面方法,才能访问修改(若有更好的方法,歡迎分享): 一.利 ...

  8. c# winfrom 可折叠的树形控件

    首先需要一个可绑定实体 [Serializable] public class TreeNodeModel { private Image _nodePic; /// <summary> ...

  9. 快速开发平台 WebBuilder 8.6发布

    WebBuilder下载:http://www.geejing.com/download.html WebBuilder快速开发平台是基于Web面向服务的应用系统开发平台,可以方便快捷的搭建各类型企业 ...

  10. python中的set集合和深浅拷贝

    一.基础数据类型的补充 1.str中的join算法,将列表转换成字符串,并用'_'(或其他) li=['李嘉诚','马化腾','刘嘉玲','黄海峰',] s='_'.join(li) print(s) ...