Django中FBV与CBV的区别及CBV源码流程解析

青禾
青禾
发布时间:2026-10-13| 6人浏览过
原创

本文详细解析Django中基于函数的视图(FBV)与基于类的视图(CBV)的区别。重点讲解如何继承View创建CBV,通过get/post方法处理请求,以及as_view()和dispatch()方法的内部执行流程。文章揭示了请求方式如何反射到具体处理函数的机制,帮助开发者深入理解Django视图层的实现原理。

Django视图基础:FBV与CBV概念

FBV(Function Based View)即基于函数的视图,是Django中一种基础的视图处理方式。

CBV(Class Based View)即基于类的视图,它是Django提供的另一种视图组织方式,允许将视图逻辑封装在类中。

CBV的创建与配置流程

若要使用CBV,需创建一个视图类并继承自django.views.View基类。

创建视图类时,通常定义一个继承View的类,例如MyView(View)。

在视图类内部,可以分别定义get和post方法,分别处理GET和POST请求,无需在单一函数中使用if语句进行请求类型的判断。

接下来需要创建对应的HTML模板文件,存放于templates目录下,用于渲染页面内容。

在urls.py中配置路由,将URL路径映射到视图类。

关键点在于,路由配置中必须调用视图类的as_view()方法,例如path('url/', MyView.as_view()),不能直接传入类名。

完成上述配置后,访问对应URL即可成功看到页面响应。

CBV内部执行机制:as_view与dispatch源码解析

读者可能会好奇,为什么请求能自动路由到get或post方法中执行?这涉及到Django视图类的内部机制。

当调用as_view()时,它返回一个view函数;该view函数被调用时,会进一步返回dispatch方法。

dispatch方法执行后返回的结果,即为最终发送给用户的HTTP响应。

dispatch的核心作用是请求分发:它根据当前HTTP请求的方法(如GET、POST等),将请求分发给对应的处理函数。

具体而言,dispatch方法通过反射机制,使用getattr函数在视图类实例(self)中查找名为get或post的方法,并调用该方法获取结果。

以上即为Django中CBV相关核心知识点的完整梳理。若在学习过程中有补充或疑问,欢迎与编辑联系交流。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。