Django 视图 - FBV 与 CBV
封面图
•
2025-10-15
•
Django教程
1
0
0
0
在 Django 中,**视图(View)** 是处理 HTTP 请求并返回 HTTP 响应的核心组件。Django 提供了两种主要的视图编写方式:**函数视图(Function-Based Views, FBV)** 和 **类视图(Class-Based Views, CBV)**。 --- ## 一、函数视图(FBV) ### 定义方式: ```python from django.http import HttpResponse def my_view(request): return HttpResponse("Hello, world!") ``` ### 特点: - 简单直接,适合简单的逻辑。 - 每个请求都调用一个函数。 - 不支持复用或组合逻辑(如登录验证、权限控制等需要手动实现)。 ### 示例:带参数的函数视图 ```python def detail(request, question_id): return HttpResponse(f"You're looking at question {question_id}.") ``` --- ## 二、类视图(CBV) ### 定义方式: ```python from django.views import View from django.http import HttpResponse class MyView(View): def get(self, request): return HttpResponse("This is a class-based view.") ``` ### 特点: - 使用类来封装视图逻辑,便于复用和扩展。 - 支持多种 HTTP 方法(GET、POST、PUT、DELETE 等),通过 `get()`, `post()` 等方法实现。 - 可以使用 Mixin(混入)来添加功能(如登录验证、权限控制等)。 - 更适合复杂的项目结构和大型应用。 ### 示例:带参数的类视图 ```python class DetailView(View): def get(self, request, question_id): return HttpResponse(f"You're looking at question {question_id}.") ``` --- ## 三、FBV 与 CBV 的对比 | 特性 | 函数视图(FBV) | 类视图(CBV) | |------|------------------|----------------| | 写法 | 函数形式 | 类形式 | | 复杂度 | 简单 | 较复杂 | | 可维护性 | 低 | 高 | | 复用性 | 低 | 高 | | 扩展性 | 低 | 高 | | 适合场景 | 简单页面 | 复杂业务逻辑 | --- ## 四、常用类视图(CBV)示例 ### 1. `ListView` 和 `DetailView` 用于显示对象列表或单个对象。 ```python from django.views.generic import ListView, DetailView from .models import Question class QuestionList(ListView): model = Question template_name = 'polls/list.html' class QuestionDetail(DetailView): model = Question template_name = 'polls/detail.html' ``` ### 2. `CreateView`, `UpdateView`, `DeleteView` 用于创建、更新、删除对象。 ```python from django.views.generic import CreateView from .models import Question from .forms import QuestionForm class QuestionCreate(CreateView): model = Question form_class = QuestionForm template_name = 'polls/create.html' success_url = '/success/' ``` --- ## 五、如何选择 FBV 还是 CBV? | 场景 | 推荐 | |------|------| | 简单页面 | FBV | | 复杂业务逻辑 | CBV | | 需要复用代码 | CBV | | 需要使用 Django 内置的通用视图 | CBV | | 快速开发 | FBV 或 CBV 都可以 | --- ## 六、总结 - **FBV**:简单、直观,适合小型项目或简单功能。 - **CBV**:结构清晰、可复用性强,适合大型项目和复杂业务逻辑。 你可以根据项目的规模和需求选择合适的方式,也可以在同一个项目中混合使用 FBV 和 CBV。 --- 如果你有具体的使用场景或想了解某个类视图的详细用法,欢迎继续提问!
上一篇:
Django Form 组件
标题录入,一次不能超过6条
返回顶部
留言
留言
评论