发布于 2026-01-06 0 阅读
0

Django 中的函数式视图与类式视图简介 函数式视图 (FBV) 类式视图 (CBV) FBV 与 CBV 的区别 结论 参考资料

Django 中的函数式视图与类式视图

介绍

基于功能的视图(FBV)

基于类别的视图(CBV)

FBV 和 CBV 有什么区别?

结论

参考

介绍

取消绘制内容结构 79gj

我刚开始学习Django的时候,总是有很多问题让我选择。

我应该使用哪种视图?是基于函数的视图还是基于类的视图?

我认为这是 Django 对初学者来说难以入门的核心原因之一。

因此,我相信本文能帮助您了解这些视图的基本功能。

在开发过程中,需要根据您的用例来选择合适的工具。

基于功能的视图(FBV)

取消绘制注释 7das

什么是基于功能的视图(FBV)?

基于函数的视图类似于在 Python 中创建函数的方式。

区别在于,它是直接调用函数而不是直接调用函数。

它接收一个HTTP请求request,该请求在……中被调用views.py

它会根据urls.pyresponse中指定的 URL返回一个 HTML,以调用该函数。

如果你刚开始学习 Django。

函数式视图是您通过Django GirlsMozilla Developer NetworkDjango的教程将首先接触到的视图

它长什么样?

最基本的形式是,基于函数的视图如下所示,它会返回一个响应。

函数fbv_1areturn用于返回 HTML 响应。

然而,对于fbv_2返回的函数,render它使用一个名为 `a` 的预先创建的模板设计detail.html来生成 HTML 响应:

from django.http import HttpResponse, HttpResponseNotFound, Http404
from django.shortcuts import render
from polls.models import Poll


def fbv_1(requests):
   if requests:
     return HttpResponse('<h1>Page was found</h1>')
   else:
     return HttpResponseNotFound('<h1>Page not found</h1>')


def fbv_2(request, poll_id):
   try:
     p = Poll.objects.get(pk=poll_id)
   except Poll.DoesNotExist:
     raise Http404("Poll does not exist")
   return render(request, 'polls/detail.html', {'poll': p})

Enter fullscreen mode Exit fullscreen mode

优点和缺点

以下内容基于我对函数式视图的研究和使用经验。

优点

  • 教学的难易程度
  • 易于实施
  • 代码库结构简洁明了,易于阅读。

缺点

  • 无法根据请求条件进行扩展或自定义
  • 难以重用的代码导致在另一个视图中出现重复代码。

基于类别的视图(CBV)

取消个人档案 222m

引入基于类的视图是为了解决视图缺乏灵活性代码重用性易于自定义的问题。

什么是基于类别的视图(CBV)?

基于上述原因创建了基于类的视图(CBV)。

它是为了解决请求条件中发现的常见模式而实现的。

你可以把CBV想象成类似于一份行动指南

它用于根据请求条件创建多样化复杂的视图。

策略手册可以建立在Classly 基于类的视图之上。

为了让您更好地了解 Django 中为 CBV 实现的内容。

它长什么样?

CBV最基本的形式是导入默认模型Viewdjango.views创建 CBV。

根据HTTP 请求方法(例如GETPOSTDELETE返回正确的响应:

from django.views import View


class CBV(View):
   def get(self, request):
     # Code block for GET request
     pass

   def post(self, request):
     # Code block for POST request
     pass

Enter fullscreen mode Exit fullscreen mode

要创建更高级更复杂的CBV 版本,可以使用内置的通用视图来处理常见行为。

另一种是提供特定功能的Mixins

要深入了解 CBV,请前往Django 文档 ClasslyDjango 中的基于类的视图,了解更多详细信息。

优点和缺点

以下内容基于我对基于类的视图的研究和工作经验。

优点

  • 通过扩展类可以轻松进行自定义
  • 基于面向对象设计原则的代码重用性
  • playbook内置式MixinCBV创建简便Generic Views

缺点

  • 如果您需要高级或复杂的 CBV,则需要对合适的内置通用视图和 mixin 进行额外的研究和测试。
  • 更难读
  • 由于抽象化,代码流程不够清晰直接,导致开发人员感到困惑。

FBV 和 CBV 有什么区别?

取消绘制开发生产力 umsq

如果您需要简单、易于维护的视图,并且您的问题需要一个无需大量自定义的直接解决方案,请选择 FBV。

如果您需要复杂可定制可重用的视图,请选择 CBV。

请注意,某些情况下您需要选择 CBV。

尤其是如果您计划创建表单身份验证

这也有可能是因为您正在使用Django REST Framework创建端点。

结论

取消绘制快照 oyn6
我希望这篇文章能帮助您更好地了解 FBV 和 CBV。

这样可以加快您在 Django 中实现 FBV 和 CBV 的学习曲线。

除此之外,我希望它能提供足够的见解,帮助您为您的使用场景选择正确的视图。

最后,对于 CBV 或 FBV 的偏好,存在多种不同的观点。

对我来说,更重要的是将其用于对你而言有意义的用例中。

我相信,如果您需要快速完成某项工作,那么对 CBV 进行研究和实施将对您有所帮助。

如果你喜欢这篇文章,请订阅我的冒险家通讯,每周获取Python创业Web 开发领域的最新资讯

您也可以关注我,获取我关于Dev 的文章的最新更新。

原文标题为《Django 中基于函数的视图与基于类的视图——阅读时间:5 分钟》,封面图片来自 Unsplash 网站上的 Dietmar Becker。

参考

文章来源:https://dev.to/steelwolf180/function-based-views-vs-class-based-views-in-django-201j