Django基于类的视图

django 1.8 官方文档翻译: 3-4-1 基于类的视图
https://segmentfault.com/a/1190000003506222


基于类的视图

视图是一个可调用对象,它接受一个请求而后返回一个响应。 python

基于类的视图优势

  1. HTTP方法(GET、POST等)可有有个字的方法,而不是经过条件分支来解决。
  2. 面向对象的技术,例如Mixin(多继承)能够将代码分解成可重用的组件。

使用基于类的视图

使用基于类的视图的核心是容许你使用不一样实例方法来形影不一样的HTTP请求方法,而不是在一个视图函数中使用条件分支代码来实现。 django

由于Django的URL解析器将请求和关联的参数发送给一个可刁颖的函数儿不是一个雷,因此基于类的视图有一个as_view()类方法类做为类的可调用入口。改as_view()入口点建立类的一个实例并调用dispatch()方法。diapatch查看请求是GET仍是POST等等,并将请求转发给相应的方法,若是发方法没有定义则引起HttpResponseNotAllowed。 segmentfault

设置了类的属性: 函数

  1. Python标准的方式,子类化并在子类中覆盖属性和方法。
  2. 在URLconf中用as_view()调用的关键字参数配置类的属性。
    urlpatterns = [
        url(r'^about/', GreetingView.as_view(greeting="G'day")),
    ]



       对于每一个请求都会实例化类的一个实例,可是as_view()入口点设置的类属性值在URl第一次导入时配置。 url

使用Mixin

  1. Mixin 是重用多个类的代码的一种极好的方法,可是它们须要一些代价。代码在Mixin 中越分散,子类将越难阅读并知道它的行为;若是你的继承很深,将难以知道应该覆盖哪个Mixin 的方法。
  2. 只能继承一个通用视图——也就是说,只能有一个弗雷继承View,其余的弗雷必须是Mixin。继承多个继承自View类将不能像预期的那样动做。

封装as_view()的Mixin

将共同的行为运用于多个类的一种方法是编写一个封装as_view()的方法Mixin。 spa

相关文章
相关标签/搜索