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

有没有办法在djangoTutorial的polls教程中将此FBV转换为CBV?

是的,可以将djangoTutorial中的polls教程中的函数视图(FBV)转换为类视图(CBV)。类视图是基于类的视图,可以提供更多的功能和灵活性。

要将FBV转换为CBV,可以按照以下步骤进行操作:

  1. 创建一个继承自适当的类视图的类。在这种情况下,你可以使用Django提供的通用类视图之一,如ListViewDetailViewCreateView等,具体取决于你的需求。
  2. 将原始的函数视图中的代码移动到类视图的适当方法中。例如,如果你的函数视图中有一个get()方法和一个post()方法,你可以将它们分别移动到类视图的get()post()方法中。
  3. 根据需要,可以在类视图中添加其他方法,如put()delete()等,以支持其他HTTP请求方法。
  4. 更新URL配置,将原始的函数视图替换为新的类视图。你可以使用as_view()方法将类视图转换为可用于URL配置的可调用对象。

下面是一个示例,演示如何将polls应用程序中的vote函数视图转换为类视图:

代码语言:txt
复制
from django.views import View
from django.shortcuts import get_object_or_404, render
from .models import Question

class VoteView(View):
    def get(self, request, question_id):
        question = get_object_or_404(Question, pk=question_id)
        return render(request, 'polls/detail.html', {'question': question})

    def post(self, request, question_id):
        question = get_object_or_404(Question, pk=question_id)
        try:
            selected_choice = question.choice_set.get(pk=request.POST['choice'])
        except (KeyError, Choice.DoesNotExist):
            return render(request, 'polls/detail.html', {
                'question': question,
                'error_message': "You didn't select a choice.",
            })
        else:
            selected_choice.votes += 1
            selected_choice.save()
            return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))

在URL配置中,你可以将原始的函数视图替换为新的类视图:

代码语言:txt
复制
from django.urls import path
from .views import VoteView

app_name = 'polls'
urlpatterns = [
    # ...
    path('<int:question_id>/vote/', VoteView.as_view(), name='vote'),
    # ...
]

这样,你就成功将vote函数视图转换为VoteView类视图。

请注意,上述示例中的代码仅用于演示目的,实际情况下可能需要根据你的具体需求进行调整和修改。

关于Django的类视图和通用视图的更多信息,请参考Django官方文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

从Django的Turotial中可以学到什么?

Django的基本使用 当然这个是最基础的了,一个入门教程读完,如果你还不能够开始使用这个东西那只能说明这个入门教程写的很失败。...Class Base View(CBV)的使用 我见过的大多数项目在写view层的时候都是清一色的FBV(function base view),所有的东西都要自己来写。...不过这个东西的使用打个比喻来说就是,用FBV像是在写作文,所有措词用句都得自己发挥,而CBV就是完形填空,填好几个项,一片文章就完成了。 5....TDD测试驱动开发 上次写Django的测试代码还是在去年,不得不说我目前对开发中的测试重视程度还是不够。...Django把测试放到Tutorial中确实是个不错的想法,让初学者一开始就知道有这样的东西存在,在一开始的项目中就建立其测试会保持良好的惯性。

85310

『Django』视图views

在 Django 中,主要有两种类型的视图: FBV:基于函数的视图 CBV:基于类的视图 FBV(Function-Based Views)和CBV(Class-Based Views)是两种处理视图的方式...在FBV中,每个视图都是一个独立的 Python 函数,接收 HTTP 请求对象作为参数,并返回 HTTP 响应对象。 其实我们在前面的文章 《『Django』路由urls》 里用的都是函数视图。...(f'这里是博客模块的首页') 项目运行起来后,在浏览器访问 http://127.0.0.1:8000/blog/ CBV:类视图 CBV(Class-Based Views)是基于类的视图方式。...在CBV中,每个视图通常是一个类方法,用于处理不同类型的 HTTP 请求。CBV提供了更多的灵活性和可扩展性,允许你在不同的方法中组织视图逻辑。...在 Django 中,当你使用类视图时,需要调用 as_view() 方法来将类视图转换为可调用的视图函数。

11710
  • 03.Django基础三之视图函数

    视图层,熟练掌握两个对象即可:请求对象(request)和响应对象(HttpResponse) 二 CBV和FBV FBV(function base views) 就是在视图里使用函数处理请求。     ...之前都是FBV模式写的代码,所以就不写例子了。 CBV(class base views) 就是在视图里使用类处理请求。   ...#引入我们在views.py里面创建的类 urlpatterns = [ url(r'^index/$', MyView.as_view()), ]     CBV传参,和FBV类似,...有人认为fbv比cbv更pythonic,窃以为不然。python的一大重要的特性就是面向对象。而cbv更能体现python的面向对象。cbv是通过class的方式来实现视图方法的。...    类中的方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中的方法 ,我们需要先将其转换为方法装饰器。

    5K30

    python 终极篇 --- django

    为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。                                    ...CBV和FBV                                          我们之前写过的都是基于函数的view,就叫FBV。还可以把view写成基于类的。...注意: 使用CBV时,urls.py中也做对应的修改: # urls.py中 url(r'^add_class/$', views.AddClass.as_view()), CBV简单的流程:    ...                                     fbv本身就是函数,所以与普通函数加装饰器没有任何区别; cbv加装饰器 类中的方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中的方法...从上面可以看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 之外,请求中的任何 HTTP 首部转换为 META 的键时, 都会将所有字母大写并将连接符替换为下划线最后加上 HTTP

    1.6K10

    Django之views系统

    除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。...CBV和FBV 我们之前写过的都是基于函数的view,就叫FBV。还可以把view写成基于类的。...时,urls.py中也做对应的修改: # urls.py中 url(r'^add_class/$', views.AddClass.as_view()), 给视图加装饰器 使用装饰器装饰FBV FBV本身就是一个函数...类中的方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中的方法 ,我们需要先将其转换为方法装饰器。...从上面可以看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 之外,请求中的任何 HTTP 首部转换为 META 的键时, 都会将所有字母大写并将连接符替换为下划线最后加上 HTTP

    2.2K70

    Django学习笔记之Django视图View

    除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。...CBV和FBV 我们之前写过的都是基于函数的view,就叫FBV。还可以把view写成基于类的。...时,urls.py中也做对应的修改: # urls.py中 url(r'^add_class/$', views.AddClass.as_view()), 给视图加装饰器 使用装饰器装饰FBV FBV本身就是一个函数...类中的方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中的方法 ,我们需要先将其转换为方法装饰器。...从上面可以看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 之外,请求中的任何 HTTP 首部转换为 META 的键时, 都会将所有字母大写并将连接符替换为下划线最后加上 HTTP

    1.8K30

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

    FBV模式和CBV模式 FBV 一个url对应一个视图函数,这个模式叫做FBV(Function Base Views) CBV CBV(Class Base views),即一个url对应一个类 例子...:使用cbv模式来请求网页 路由信息: urlpatterns = [ url(r'^fbv/',views.fbv), url(r'^cbv/',views.CBV.as_view()...type="submit"> 启动项目,在浏览器中输入http://127.0.0.1:8000/cbv/,回车,得到的网页如下: 在input框中输入”hello”...而如果使用cbv模式,在url匹配成功之后,会找到视图函数中对应的类,然后这个类回到请求头中找到对应的Request Method....fbv方式请求的过程 用户发送url请求,Django会依次遍历路由映射表中的所有记录,一旦路由映射表其中的一条匹配成功了, 就执行视图函数中对应的函数名,这是fbv的执行流程 cbv方式请求的过程

    1.6K40

    手把手教你进行Pycharm活动模板配置

    和Pycharm安装详细教程,安装好Pycharm后如何配置Python解释器简易教程,有个活动模板配置,小编觉得也还是蛮重要的,这里整理出来给大家学习。...如果想学习一些Pycharm的使用技巧,在后台的精选文章栏目里边有专门的文章系列,可以去学习一下的, 今天给小火煲们带来的干货是Pycharm活动模板配置,一起来看看吧~ /2 什么是活动模板/ 话不多说...很简单的一个示例,就是在pycharm中输入main关键字,会自动带出一些默认的代码,这个就是活动模板配置 可能有人会问,这个有什么用呢,我只能说,人因懒而伟大,本老鸟就是本着能少写代码就少写代码的态度.../5 总结/ 综上,简单的模板配置就这样完了,下面,我们来看一下它还能让我们有多懒,做web的我们都知道,python有名的web框架,Django,但是我们在写视图的时候,是FBV模式(函数对应url...),但是实际中,我们为了代码更加健壮,一般都会使用CBV模式(类对应url),我们来看一下活动模板是否能给我们带来快捷。

    56620

    Django之视图层与模板层

    从上面可以看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 之外,HTTP协议的请求头数据转换为 META 的键 时, 都会 1、将所有字母大写 2、将单词的连接符替换为下划线...你需要加一个safe参数 return JsonResponse(l,safe=False) 1.4FBV与CBV Django的视图层由两种形式构成:FBV基于函数的视图(Function...base view)和CBV基于类的视图(Class base view) 1.4.1FBV 我们前面使用的视图函数就是FBV。...:url(r'^login/',views.MyLogin.as_view()) 从路由的书写可以看出这里执行的是类的方法,而方法的本质还是函数所以CBV在路由匹配上的本质还是FBV。...2.3标签 标签(逻辑相关)是为了在模板中完成一些特殊的功能,语法为{% %},下面介绍几个常用的标签。

    9.2K10

    django之路由分组,反向解析,有名

    只要不混着用,有名分组和无名分组支持多个相同类型的传参  反向解析: 试想一个场景,你有200多个a标签,href都指向index/,有一天在urls里面index改为了new_index,那么你只能手动改变...a标签中的href,当你改完,又变成了my_index,那么一天的时间都可能在改地址,那么有没有什么方法,不再把程序写死,反向解析就是应用于此。...的区别(了解) 1.0里面的url对应django2.0里面re_path django2.0里面的path第一个是精准匹配(你怎么写的,我就怎么匹配) django1.0版本中匹配到的参数都是字符串类型...django2.0转换器(了解) 1.0版本的url和2.0版本的re_path分组出来的数据都是字符串类型 默认有五个转换器,感兴趣的自己可以课下去试一下   str...,也可以重定向到自己路由) django返回的数据都是HttpResponse对象 JsonResponse(返回json格式的数据) FBV与CBV   FBV:基于函数的视图

    1.6K10

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

    快速使用DRF写出接口 序列化和反序列化 drf快速使用 views.py serializer.py urls.py 在settings的app中注册 models.py postman测试 CBV源码流程分析...把我们语言识别的数据转换成指定的格式提交给别人(前端) 比如python中的字典,列表,对象等转json,xml,prop···· 反序列化:把别人提供的数据转换成我们所需的格式 最常见的比如我们使用...,这里尽量在body体里写全参数 局部修改:修改id为1的数据,修改啥写啥 删除一条数据:删除id为2的数据 CBV源码流程分析 因为DRF框架里大部分都是基于CBV(视图类)...FBV都是函数的内存地址,比如views.类.as_view()底层仍然是函数的内存地址 CBV源码执行流程 '''views.py''' from django.views import View...第二个参数是函数内存地址,CBV的底层也是FBV,as_view是类的绑定方法,自己的类中没有去父类(View)找,as_view()执行完,也是一个内存地址,内存地址是谁的?

    1.3K10

    Django实践-10RESTful架构和DRF入门

    在实现SOA的诸多方案中,REST被认为是最适合互联网应用的架构,符合REST规范的架构也经常被称作RESTful架构。...在Group和User中,我们使用的是HyperlinkedModelSerializer的超链接关系。您也可以使用主键和各种其他关系,但是超链接是很好的RESTful设计。...编写视图函数 DRF框架支持两种实现数据接口的方式,一种是FBV(基于函数的视图),另一种是CBV(基于类的视图)。代码如下所示。...步骤如下: 1.安装依赖 2.在settings.py中INSTALLED_APPS注册rest_framework并配置 REST_FRAMEWORK 相关 3.在polls2的添加序列化模块serializer.py...4.在polls2的views.py中添加restful风格的函数 5.在urls.py中配置url映射 6.在static/html中新建前端页面 7.运行测试

    35421

    Python常见面试题【悟空教程】

    将主机名转换为IP地址 在浏览器地址栏输入一个HTTP的URL地址,浏览器怎么通过HTTP显示位于服务器上的一个HTML资源 (1)浏览器首先从URL中解析出服务器的主机名并转换成服务器的IP地址 (2...中的wsgi,再经过django的中间件,最后url到路由映射表,在路由中一条一条进行匹配,一旦其中一条匹配成功就执行相对应的视图函数。...23.FBV模式和CBV模式 一个url对应一个视图函数,这个模式叫做FBV(Function Base Views) FBV请求过程: 用户发送url请求,django会依次遍历路由映射表中的所有记录...一个url对应一个类,这个模式叫CBV(Class Base Views) CBV请求过程: 当服务端使用cbv模式的时候,用户发给服务端的请求包含url和method,这两个信息都是字符串类型,服务端通过路由映射表匹配成功后...在进行相对复杂的查询时,使用 django.db.models.Q Django中想验证表单提交是否格式正确要用到Form中哪个函数?

    1.4K20

    Django模板语言与视图(view)

    在子页中通过使用定义的母板中的block名来对应替换母板中的相应内容.  {% block page-main %} 世情薄 人情恶 雨送黄昏花易落...CBV(class based view)和FBV(function based view )   基于函数的view,叫FBV, 还可以把view写成基于类的.   ...返回HttpResponse对象 给django    通过继承view方法,帮助完成逻辑业务中的功能(post,get,filter等八种接收方法),相较于FBV   CBV版更加简洁,不用if判断,...CBV版添加装饰器 类中的方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中的方法 ,我们需要先将其转换为方法装饰器。...从上面可以看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 之外,请求中的任何 HTTP 首部转换为 META 的键时, 都会将所有字母大写并将连接符替换为下划线最后加上 HTTP

    3.4K20

    django 1.8 官方文档翻译: 1-3-1 高级教程:如何编写可重用的应用

    幸运的是,你已经在正确的道路上。在教程 3中,我们看到我们可以如何使用include将投票应用从项目级别的URLconf 解耦。...在本教程中,我们将更进一步,让你的应用在新的项目中容易地使用并随时可以发布给其它人安装和使用。 包?应用? Python 包 提供的方式是分组相关的Python 代码以容易地重用。...2中创建了mysite/templates ,在教程 3中创建了polls/templates。...现在你可能更加清晰为什么我们为项目和应用选择单独的模板目录:属于投票应用的部分全部在polls中。它使得该应用自包含且更加容易丢到一个新的项目中。...应用的标签(应用的包的点分路径的最后部分)在INSTALLED_APPS中必须唯一。

    55540

    Django下重用自己写的app

    许多Python 和 Django 项目都有常见的共同问题。可重用将会节省这些重复性工作。 可重用性在Python 中是一种常见的方式。...幸运的是,你已经在正确的道路上。在教程 3中,我们看到我们可以如何使用include将投票应用从项目级别的URLconf 解耦。...在本教程中,我们将更进一步,让你的应用在新的项目中容易地使用并随时可以发布给其它人安装和使用。 包?应用? Python 包 按照简单重用的方式,将具有相关性的Python代码归为一组。...这有助于其他正在查找Django应用的人区分你的应用是专门用于Django的。 应用的标签(应用的包的点分路径的最后部分)在INSTALLED_APPS中必须唯一。...更多关于打包的信息,参见Python 的 打包和分发项目的教程。 使用你自己的包 因为,我们将polls 目录移到项目的目录之外,它不再工作了。

    1.2K30

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

    编写一个简单的窗体 让我们把在上一篇教程中编写的 poll 的 detail 模板更新下,在模板中包含 HTML 的 组件: {{ poll.question }} {% if error_message...在 教程 第3部分 中,我们为 polls 应用创建了一个 URLconf 配置中包含有这一行代码: url(r'^(?...在本例中,我们使用了教程 第3部分中的 URLconf 配置, reverse() 将会返回类似如下所示的字符串 '/polls/3/results/' … 在此 3 就是 p.id 的值。...在之前的教程中,模板提供的上下文中包含了 poll 和 latest_poll_list 上下文变量。...现在你可以在 polls/views.py 中删除 index() , detail() 和 results() 视图了。 我们不需要它们了 – 它们已替换为通用视图了。

    1.5K10

    django 1.8 官方文档翻译: 3-1-1 URL调度器

    在某些场景中,一个视图是通用的,所以在URL 和视图之间存在多对一的关系。对于这些情况,当反查URL 时,只有视图的名字还不够。请阅读下一节来了解Django 为这个问题提供的解决办法。...在下面的例子中,我们将讨论在两个不同的地方部署教程中的polls 应用,这样我们可以为两种不同的用户(作者和发布者)提供相同的功能。...命名URL’sports:polls:index’ 将在命名空间’polls‘中查找’index‘,而poll 定义在顶层的命名空间’sports’ 中。...如果提供的命名空间与第1步中的应用命名空间 不匹配,Django 将尝试直接将此命名空间作为一个实例命名空间查找。...例子 为了演示解析的策略,考虑教程中polls 应用的两个实例:’author-polls’ 和’publisher-polls‘。假设我们已经增强了该应用,在创建和显示投票时考虑了实例命名空间。

    1.3K20
    领券