【django】views知识总结---FBV,CBV优点与缺点

Django Views 知识总结

1. 概述

  • Django 的视图负责接收请求并返回响应,连接用户的输入和后端逻辑。
  • 主要分为两种视图:
    1. 函数视图(Function-Based Views,FBV)
    2. 类视图(Class-Based Views,CBV)

2. 函数视图(FBV)

(1)定义方式
  • 一个普通的 Python 函数,用于接收 HttpRequest 对象并返回 HttpResponse 对象。
(2)示例代码
from django.http import HttpResponse

def my_view(request):
    if request.method == "GET":
        return HttpResponse("This is a GET request")
    elif request.method == "POST":
        return HttpResponse("This is a POST request")
    else:
        return HttpResponse("Unsupported HTTP method", status=405)
(3)优点与缺点
  • 优点:简单直观,逻辑集中在一个函数中。
  • 缺点:不适合复杂场景,逻辑容易变得混乱。

3. 类视图(CBV)

(1)定义方式
  • 使用 Django 提供的 View 类或其子类,通过方法实现视图逻辑。
(2)示例代码
from django.http import HttpResponse
from django.views import View

class MyView(View):
    def get(self, request):
        return HttpResponse("This is a GET request")
    
    def post(self, request):
        return HttpResponse("This is a POST request")
(3)优点与缺点
  • 优点
    • 提供方法分离(getpost 等),逻辑更清晰。
    • 易于扩展和复用。
  • 缺点
    • 初学者理解起来稍复杂。
    • 对于简单逻辑可能显得繁琐。

4. 通用视图(Generic Views)

(1)定义
  • Django 提供的内置类视图,简化常见操作如 CRUD(增删改查)。
(2)常见通用视图
  1. TemplateView:渲染模板。

    from django.views.generic import TemplateView
    
    class HomePageView(TemplateView):
        template_name = "home.html"
    
  2. ListView:展示对象列表。

    from django.views.generic import ListView
    from myapp.models import MyModel
    
    class MyModelListView(ListView):
        model = MyModel
        template_name = "mymodel_list.html"
    
  3. DetailView:展示单个对象详情。

    from django.views.generic import DetailView
    from myapp.models import MyModel
    
    class MyModelDetailView(DetailView):
        model = MyModel
        template_name = "mymodel_detail.html"
    
  4. CreateView:创建新对象。

  5. UpdateView:更新对象。

  6. DeleteView:删除对象。


5. URL 配置与视图关联

(1)函数视图关联
from django.urls import path
from .views import my_view

urlpatterns = [
    path("my-view/", my_view, name="my_view"),
]
(2)类视图关联
  • 使用 .as_view() 方法。
from django.urls import path
from .views import MyView

urlpatterns = [
    path("my-view/", MyView.as_view(), name="my_view"),
]

6. 请求与响应处理

(1)接收请求
  • request 对象包含:
    • request.method:HTTP 方法。
    • request.GETrequest.POST:查询参数和表单数据。
    • request.user:当前用户对象。
(2)返回响应
  • 常见响应类型:
    • HttpResponse:返回纯文本或 HTML。
    • JsonResponse:返回 JSON 数据。
    • HttpResponseRedirect:返回重定向。

7. 中间件与装饰器

(1)装饰器
  • 用于添加额外功能,如权限检查。
from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    return HttpResponse("This view requires login")
(2)中间件
  • 全局处理请求或响应的钩子,例如日志记录、身份验证。

8. 小结

  • 函数视图适合简单场景,类视图更适合复杂逻辑。
  • 通用视图通过封装常见模式,提高开发效率。
  • 理解视图与 URL 配置的关联以及请求响应机制是核心。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值