Django CBV 源码分析

摘要转载自 「51reboot运维开发」 ( mp.weixin.qq.com ) By 51reboot运维开发

预计阅读时间 0 分钟(共 0 个字, 0 张图片, 0 个链接)

Jeff 的技术栈

出处:http://dwz.date/aFXG


目录
  • FBV

  • CBV

  • CBV基本写法

  • CBV源码分析

  • settings源码分析



FBV


FBV 是基于函数的视图



CBV


CBV 是基于类的视图



CBV 基本写法

向 login 提交 get 请求会自动执行 MyLogin 里面的 get 方法,而提交 post 请求也会自动执行 MyLogin 里面的 post 方法。为什么 MyLogin 针对不同的请求方法能够自动执行对应的方法?

同样写在 views.py 中
from django.views import View
class MyLogin(View):
    def get(self,request):
        return render(request,'login.html') //写功能
    def post(self,request):
        return HttpResponse('我是类里面的post方法') /写功能


urls.py 中:

# CBV路由配置
    url(r'^login/',views.MyLogin.as_view()),



CBV 源码分析


1、研究源码的突破口
url(r'^login/',views.MyLogin.as_view())


猜想:
as_view 要么是类里面定义的普通函数 @staticmethod
要么是类里面定义的绑定给类的方法  @classmethod

2、进入源码发现是等价 @classmethod 类绑定方法,并且返回了 view 函数名称

3、等价
函数名加括号,执行优先级最高


4、view 函数返回 self.dispatch(request, *args, **kwargs), 点进去查看,当看到 self. 属性或者方法的时候,一定要遵循对象属性和方法的查找顺序。
对象本身--->产生对象的类--->类的父类


5、获取请求方式,并转成小写。进 self.http_method_names 里查看。判断当前请求方式是否符合默认8个请求方式


6、http_method_names 里面是一堆请求方式的列表。8个


7、退到第5步,if 判断肯定通过,继续往下走


8、根据返回值 get,post 自动执行相应的函数



settings 源码分析


1、问题抛出
django settings 源码 django 暴露给用户一个可以自定义的配置 但是内部也有默认的配置,用户配置了就用 用户的,用户没有配就用默认的。原理是如何实现的?你们知道吗?



团购、优惠、课程详情
扫码咨询>>>


招人(内推岗)

资料分享

运维精华面试题

安装 gin 出现的问题及解决和设置代理报错解决



more_vert