详解Django中的FBV和CBV对比分析

认真发呆
认真发呆
发布时间:2026-10-11 | 3人浏览过
原创

本文深入解析Django框架中FBV(基于函数的视图)与CBV(基于类的视图)的核心差异。通过对比代码结构、路由配置及继承封装特性,帮助开发者理解两种模式的适用场景,并提供完整的实现示例与路径配置指南。

核心概念与差异

Django 提供了两种主要的视图编写模式:FBV(Function Based Views)和 CBV(Class Based Views)。FBV 侧重于通过函数处理请求,而 CBV 则利用面向对象特性,通过类来组织逻辑。CBV 的主要优势在于其天然支持类的继承与封装,使得代码复用和逻辑扩展更加便捷。

FBV 实现方式

在 FBV 模式下,开发者编写一个接收 request 参数的函数。视图内部通过判断 request.method 的属性值(如 'GET'、'POST')来区分请求类型,并执行相应的业务逻辑后返回响应。

以下是 FBV 的标准实现代码:

def fbv(request):
  if request.method == 'GET':
    return HttpResponse("GET")
  elif request.method == 'POST':
    return HttpResponse("POST")
  else:
    return HttpResponse("OTHER")

在 urls.py 中,FBV 的路由配置相对简单,直接将视图函数映射到 URL 路径即可:

path('test/', views.fbv),

CBV 实现方式

CBV 将视图逻辑封装在类中。开发者需要在类中定义与 HTTP 方法同名的方法(如 get、post),并在这些方法中实现具体的处理逻辑。这种结构更符合 RESTful 风格的设计规范。

以下是一个继承自 View 的 CBV 示例,其中使用了 @csrf_exempt 装饰器来豁免 CSRF 验证:

class CBV(View):
  @csrf_exempt
  def get(self):
    return HttpResponse("GET")

  @csrf_exempt
  def post(self):
    return HttpResponse("POST")

  @csrf_exempt
  def put(self):
    return HttpResponse("PUT")

在 urls.py 中配置 CBV 时,必须调用类的 as_view() 方法,将其转换为可调用对象:

path('test/', views.cbv.as_view()),

以上就是Django中的FBV和CBV对比分析的详细内容,更多关于Django视图开发技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表