CBV是什么意思,cb是什么意思

  CBV是什么意思,cb是什么意思

  

  要理解django的基于阶级的观点(以下简称cbv),首先要明白django引入cbv的目的是什么。django1.3之前的generic view,即所谓的通用视图,使用的是function-based-view(fbv),即基于函数的视图。有些人认为fbv比cbv更pythonic,但他们不这么认为。python的一个重要特点是面向对象。而cbv更能体现python的面向对象。Cbv通过类的方式实现view方法。与函数相比,类可以更好地利用多态的特异性,因此更容易从宏观层面抽象出项目中的通用函数。关于多态性,我不多解释了。感兴趣的同学自己谷歌一下。总之,可以理解为一个事物有多种形态。看一下django的源代码就很容易理解cbv的实现原理。一般url路由到这个cbv后,通过cbv的内部调度方法进行分发,get请求分发到cbv.get方法进行处理,post请求分发到cbv.post方法进行处理。其他方法类似。如何利用多态性?cbv中引入了mixin的概念。mixin是一些已经写好的基础类,然后通过不同的mixin组合成最终想要的类。

  所以理解cbv的基础是理解Mixin。Django中使用Mixins来重用代码。一个视图类可以继承多个mixins,但只能继承一个视图(包括它的子类)。建议最右边写View,左边写multiple mixins。

  CBV(class base views)使用类来处理视图中的请求。

  Python是一种面向对象的编程语言。如果只靠函数开发,就会错过面向对象的很多优点(继承、封装、多态)。所以Django后来加入了基于类的观点。让我们在课堂上写视图。这样做的优点如下:

  提高了代码的可重用性,可以使用面向对象技术。比如Mixin(多重继承)可以针对不同的HTTP方法用不同的函数来处理,而不用做很多if判断,从而提高代码的可读性。

  使用class-based views

  如果我们想写一个处理GET方法的视图,如果是用函数写的,如下。

  from django . httpimporthttpresponse

  defmy_view(请求):

  ifrequest.method==GET:

  ReturnHttpResponse(OK ),如果用基于类的视图编写,如下所示。

  from django . httpimporthttpresponse

  fromdjango.viewsimportView

  classMyView(视图):

  defget(自身,请求):

  returnHttpResponse(OK)Django的url将请求分配给可调用函数,而不是类。为了解决这个问题,基于类的视图提供了一个静态方法as_view()(即类方法)。调用此方法时,将创建该类的一个实例,然后通过该实例调用dispatch()方法。dispatch()方法会调用相应的方法来处理请求(比如get()、post()等。)根据请求的方法不同。在这一点上,这些方法类似于基于函数的视图。要接收请求,请获取响应返回。如果该方法未定义,将引发HttpResponseNotAllowed异常。

  在url中,就像这样写:

  fromdjango.conf.urlsimporturl

  frommyapp.viewsimportMyView

  urlpatterns=[

  url(r^index/$,MyView.as_view()),

  ]类的属性可以通过两种方式设置。第一个是常见的Python方法,它可以被子类覆盖。

  fromdjango . httpimporthttpresponsefromdjango . viewsimportview

  classGreetingView(视图):

  name=袁

  defget(self,request): returnhttpresponse(self . name)

  #Youcanoverridethatinasubclass

  class morning greeting view(greeting view):

  Name=alex 第二种方法,你也可以在url中指定类的属性:

  在url中设置类的属性Python

  urlpatterns=[

  url(r^index/$,greetingview.as_view(name=egon)),

  ]

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: