首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

视图 vs. 函数视图

视图 vs. 函数视图 Posted December 12, 2018 ? #Coding 基于视图(CBV)和基于函数视图(FBV)到底有什么区别? 有什么优缺点? 本篇将会去探讨。...在阅读本篇之前,请记住一点「基于视图不会替代基于函数视图」. 介绍 无论是类视图还是基于函数视图, 最终绑定到 URL Conf 都是函数. 为什么这么说?...这样就太像基于函数视图了, 当然view_function其实就是函数. as_view 方法是基于外部接口, 他返回一个视图函数....你可以直接使用它们来加快开发过程,以下是可用视图概述: 基础视图 View (最基本View) TemplateView RedirectView 通用展示视图 ListView DetailView....正如我开头提到基于视图不会取代基于函数视图, 有些情况下基于函数视图更容易实现, 有些时候繁琐需求变更及代码复用你选择基于视图更好.

2.4K10

『Django』视图views

在 Django 中,主要有两种类型视图: FBV:基于函数视图 CBV基于视图 FBV(Function-Based Views)和CBV(Class-Based Views)是两种处理视图方式...要使用视图需要2步,第1步是先创建一个路由指向视图函数,第2步是创建视图函数。 FBV:函数视图 FBV(Function-Based Views)是基于函数视图方式。...') 项目运行起来后,在浏览器访问 http://127.0.0.1:8000/blog/ CBV:类视图 CBV(Class-Based Views)是基于视图方式。...在 Django 中,当你使用类视图时,需要调用 as_view() 方法来将类视图换为可调用视图函数。...因此,需要使用 as_view() 方法将类视图换为可调用函数,以便在 URL 配置中使用。

6410
您找到你想要的搜索结果了吗?
是的
没有找到

基于通用视图:ListView 和 DetailView

于是,Django 把这些相同逻辑代码抽取了出来,写成了一系列通用视图函数,即基于通用视图(Class Based View)。...使用类视图是 Django 推荐做法,而且熟悉了类视图使用方法后,能够减少视图函数重复代码,节省开发时间。接下来就让我们把博客应用中视图函数改成基于通用视图。...好在将类视图转换成函数视图非常简单,只需调用类视图 as_view() 方法即可(至于 as_view 方法究竟是如何将一个类转换成一个函数目前不必关心,只需要在配置 URL 模式是调用 as_view...下面我们就来将 detail 视图函数换为等价视图 PostDetailView,代码如下: blog/views.py from django.views.generic import ListView...此外,这里是 Django 官方文档对类视图讲解,尽管我觉得这部分文档对类视图也讲得不是很清楚,不过也值得作为参考吧 基于视图概述。

2.6K70

django 1.8 官方文档翻译: 1-2-4 编写你第一个Django应用,第4部分

HttpResponseRedirect 对象需要一个参数:用户将被重定向 URL (请继续看下去在这情况下我们是如何构造 URL ) 。...此函数有助于避免在视图中硬编码 URL 功能。它指定了我们想要跳转视图函数名以及视图函数中 URL 模式相应可变参数。...我们也指定了 results 列表视图 template_name – 这确保了 results 视图和 detail 视图渲染时会有不同外观,虽然它们有一个 DetailView 隐藏在幕后。...现在你可以在 polls/views.py 中删除 index() , detail() 和 results() 视图了。 我们不需要它们了 – 它们已替换为通用视图了。...你也可以删除不再需要 HttpResponse 导入包了。 运行服务器,并且使用下基于通用视图新投票应用。 有关通用视图完整详细信息,请参阅 通用视图文档.

1.4K10

不会DRF?源码都分析透了确定不来看?

,这里尽量在body体里写全参数 局部修改:修改id为1数据,修改啥写啥 删除一条数据:删除id为2数据 CBV源码流程分析 因为DRF框架里大部分都是基于CBV(视图类)...FBV都是函数内存地址,比如views.类.as_view()底层仍然是函数内存地址 CBV源码执行流程 '''views.py''' from django.views import View...且看分析源码执行过程~ '''请求来了在不考虑中间件情况下,从路由匹配关系和视图函数来看''' 1、cbv路由写法:path('test/', views.TestView.as_view()) #...第二个参数是函数内存地址,CBV底层也是FBV,as_view是类绑定方法,自己类中没有去父类(View)找,as_view()执行完,也是一个内存地址,内存地址是谁?...,执行过程中出了异常,都会被处理掉 6、dispatch执行完毕返回reponse对象,跳转回进入视图函数继续执行as_view去掉了csrf校验 如何包装了新request?

1.3K10

03.Django基础三之视图函数

一 Django视图函数view   一个视图函数(类),简称视图,是一个简单Python 函数(类),它接受Web请求并且返回Web响应。   ...视图层,熟练掌握两个对象即可:请求对象(request)和响应对象(HttpResponse) 二 CBV和FBV FBV(function base views) 就是在视图里使用函数处理请求。     ...在django1.3之前,generic view也就是所谓通用视图,使用是function-based-view(fbv),亦即基于函数视图。...    类中方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中方法 ,我们需要先将其转换为方法装饰器。     ...Django中提供了method_decorator装饰器用于将函数装饰器转换为方法装饰器。

4.9K30

python 终极篇 --- django

CBV和FBV                                          我们之前写过都是基于函数view,就叫FBV。还可以把view写成基于。...得到HttpResponse对象,返回django处理 fbv ---   基于函数视图     cbv ----基于视图                                  加装饰器...                                     fbv本身就是函数,所以与普通函数加装饰器没有任何区别; cbv加装饰器 类中方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中方法...Django中提供了method_decorator装饰器用于将函数装饰器转换为方法装饰器。 ?...Django会将这个对象自动传递给响应视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。 其实request参数就接收了页面请求.

1.6K10

python测试开发django-73.django视图 CBV 和 FBV

前言 FBV(function base views) 就是在视图里使用函数处理请求,这一般是学django入门时候开始使用方式。...CBV(class base views) 就是在视图里使用类处理请求,这是面向对象编程方式。...面试时候基本上都是问到:你平常写视图基于函数视图 (FBV),还是基于视图 (CBV),两者区别在哪? 如果你只会写基于函数视图,那说明还处于初级入门阶段了。...模式 CBV(class base views) 就是在视图里使用类处理请求 自定义类必须继承 View 父类 提高了代码复用性,可以使用面向对象技术,比如 Mixin(多继承) 可以用不同函数针对不同...HTTP 方法处理,而不是通过很多if判断,提高代码可读性 CBV 模式继承View类提供了多种请求方式对应响应函数不需要在进行判断,可以直接在子类重写继承方法 CBV 模式子类继承重写父类请求方式响应函数通过父类

51210

Django 官方推荐姿势:类视图

于是,django 把这些相同逻辑代码抽取了出来,写成了一系列通用视图函数,即基于通用视图(Generic Class Based View)。...使用类视图是 django 推荐做法,熟悉了类视图使用方法后,能够减少视图函数重复代码,节省开发时间。接下来就让我们把博客应用中视图函数改成基于通用视图。...好在将类视图转换成函数视图非常简单,只需调用类视图 as_view() 方法即可(至于 as_view 方法究竟是如何将一个类转换成一个函数目前不必关心,只需要在配置 URL 模式是调用 as_view...下面我们就来将 detail 视图函数换为等价视图 PostDetailView,代码如下: blog/views.py from django.views.generic import ListView...文章详情视图也写好了,同样,你需要在 urls.py 中进行配置,将原来函数视图 detail 改为类视图,相信你应该已经知道如何做了。

1.3K20

Django学习笔记之CBV和FBV

FBV FBV(function base views) 就是在视图里使用函数处理请求。 在之前django学习中,我们一直使用是这种方式,所以不再赘述。...CBV CBV(class base views) 就是在视图里使用类处理请求。 Python是一个面向对象编程语言,如果只用函数来开发,有很多面向对象优点就错失了(继承、封装、多态)。...是将一个请求分配给可调用函数,而不是一个class。...在django1.3之前,generic view也就是所谓通用视图,使用是function-based-view(fbv),亦即基于函数视图。...有人认为fbv比cbv更pythonic,窃以为不然。python一大重要特性就是面向对象。而cbv更能体现python面向对象。cbv是通过class方式来实现视图方法

94010

django 1.8 官方文档翻译: 3-4-2 内建显示视图

的确,大多数来自Django开发新手 问题是如何能使得通用视图使用范围更广。...这是通用视图在1.3发布中被重新设计原因之一 - 之前,它们仅仅是一些函数视图加上 一列令人疑惑选项;现在,比起传递大量配置到URLconf中,更推荐扩展通用视图 方法是子类化它们,并且重写它们属性或者方法...这就是说,通用视图有一些限制。如果你将你视图实现为通用视图子类,你就会发现这样能够更有效地编写你想要代码,使用你自己基于类或功能视图。...DetailView通用视图提供了一个publisher对象给context,但是我们如何在模板中添加附加信息呢?...然而,model参数并不是唯一能够指明视图基于哪个对象进行操作方法 – 你同样可以使用queryset参数来指定一个对象列表: from django.views.generic import DetailView

1.4K40

Django 1.10中文文档-第一个应用Part4-表单和通用视图

这个函数可以避免在视图函数中硬编码URL。它需要我们给出想要跳转视图名字和该视图所对应URL模式中需要给该视图提供参数。...如果您有兴趣,可以阅读使用F()避免竞争条件,以了解如何解决此问题; 使用通用视图:减少代码冗余 上面的detail、index和results视图代码非常相似,有点冗余,这是一个程序猿不能忍受...仅仅需要做以下几步来完成转换: 修改URLconf; 删除一些旧无用视图; 采用基于通用视图视图。...这里使用两个通用视图:ListView和DetailView。这两个视图分别代表“显示对象列表”和“显示特定类型对象详细信息页面”抽象概念。 每个通用视图需要知道它将作用于哪个模型。...现在你可以运行开发服务器,然后试试基于泛型视图应用程序了。 更多关于通用视图详细信息,请查看通用视图文档。

2.3K40

Django 视图 之FBV与CBV

Django 视图之FBV 与 CBV FBV(function base views) 基于函数视图,就是在视图里使用函数处理请求 CBV(class base views) 基于视图,就是在视图里使用类处理请求...FBV FBV基于函数这种类型我们一直在使用,比如: '''urls.py''' urlpatterns = [ path("login/", views.login), ] '''views.py...基于视图,就是使用了类来处理用户请求,不同请求我们可以在类中使用不同方法来处理,这样大大提高了代码可读性; 基于视图实现主要还是通过父类 View 提供一个静态方法 as_view(...) ,as_view 方法是基于外部接口, 他返回一个视图函数,调用后请求会传递给 dispatch 方法,dispatch 方法再根据不同请求来处理不同方法。...这样看起来CBV基于本质也是基于函数,在满足func2情况下触发视图函数,源码展示如下: @classonlymethod # 绑定给类 def as_view(cls, **initkwargs

31410

Django之视图层与模板层

一、视图视图函数(类)简称为视图,就是一个普通函数(类),它功能是接收web请求,并返回web响应....从上面可以看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 之外,HTTP协议请求头数据转换为 META 键 时, 都会 1、将所有字母大写 2、将单词连接符替换为下划线...特点:无论视图本身包含什么逻辑都必须要返回响应,另外视图函数放在views.py是约定俗成,并不是必须要放在这里。 1.2.1HttpResponse() 括号内直接跟一个具体字符串作为响应体。...你需要加一个safe参数 return JsonResponse(l,safe=False) 1.4FBV与CBV Django视图层由两种形式构成:FBV基于函数视图(Function...base view)和CBV基于视图(Class base view) 1.4.1FBV 我们前面使用视图函数就是FBV。

9.2K10

WEB框架本质和第一个Django实例

在MVC解释中,视图描述了展现给用户数据,是指所看到数据,而不是如何看见它。在python中视图是指对某一特定URL回调函数, 因为回调函数描述了所要展现数据。模版用于将内容与展现分离。...在django中,视图描述了要展现数据,而视图一般转交给模版。模版描述了数据如何展现。控制器则是指django框架本身, 通过URL配置,系统将一个请求发送到一个合适视图。...FBV模式和CBV模式 FBV 一个url对应一个视图函数,这个模式叫做FBV(Function Base Views) CBV CBV(Class Base views),即一个url对应一个类 例子...而如果使用cbv模式,在url匹配成功之后,会找到视图函数中对应类,然后这个类回到请求头中找到对应Request Method....fbv方式请求过程 用户发送url请求,Django会依次遍历路由映射表中所有记录,一旦路由映射表其中一条匹配成功了, 就执行视图函数中对应函数名,这是fbv执行流程 cbv方式请求过程

1.6K40

Django学习笔记之Django视图View

一个视图函数(类),简称视图,是一个简单Python 函数(类),它接受Web请求并且返回Web响应。 响应可以是一张网页HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。...CBV和FBV 我们之前写过都是基于函数view,就叫FBV。还可以把view写成基于。...类中方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中方法 ,我们需要先将其转换为方法装饰器。...Django中提供了method_decorator装饰器用于将函数装饰器转换为方法装饰器。...Django会将这个对象自动传递给响应视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。

1.8K30

Django学习笔记 1.4 表单和通用视图

文章目录 前言 1 编写一个简单表单 1.1 模版中新增表单 1.2 视图中新增交互处理 1.3 重定向 results 页面增加显示 1.4 完善 results.html 页面代码 2 通用视图... 2 通用视图 投票应用中 detail 和 results 视图操作都差不多,显得冗余。...这些视图反映基本 Web 开发中一个常见情况:根据 URL 中参数从数据库中获取数据、载入模板文件然后返回渲染后模板。...让我们将我们投票应用转换成使用通用视图系统,仅仅需要做以下几步来完成转换: 1.转换 URLconf。 2.删除一些旧、不再需要视图。 3.基于 Django 通用视图引入新视图。...小结 这节终于用上了通用视图,再一次感受到了Django框架,把冗余东西都做了简化抽象。 定义了通用视图,传递给它指定模版,以及模型,一切就OK了。它比 render 快捷函数更加简洁。 ----

77710
领券