Django的基础视图

View

基于主类的基本视图。所有其他基于类的视图都从该基类继承。严格来说,它不是通用视图,因此也可以从导入django.views

示例views.py

from django.views import View

class MyView(View):

    def get(self, request, *args, **kwargs):
        return HttpResponse('Hello, World!')

示例urls.py


from myapp.views import MyView

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

属性

http_method_names

该视图将接受的HTTP方法名称的列表。

默认值:

['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']

方法

classmethod as_view** initkwargs

返回一个接受请求并返回响应的可调用视图:

response = MyView.as_view()(request)

TemplateView

示例views.py

from django.views.generic.base import TemplateView

from articles.models import Article

class HomePageView(TemplateView):

    template_name = "home.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['latest_articles'] = Article.objects.all()[:5]
        return context

 

示例urls.py

from django.urls import path

from myapp.views import HomePageView

urlpatterns = [
    path('', HomePageView.as_view(), name='home'),
]

 

 

 

### Django 类视图使用说明 #### 什么是类视图? 类视图(Class-Based Views,简称 CBV)是 Django 中一种强大的工具,用于构建更复杂的 Web 应用程序。相比传统的基于函数的视图(Function-Based Views,FBV),类视图提供了更高的可重用性和灵活性[^2]。 --- #### APIView 的基本概念 `APIView` 是 Django REST Framework (DRF) 提供的一个基础类视图,它允许开发者通过继承并覆盖其方法来创建自定义的 API 接口。`APIView` 将 HTTP 请求映射到相应的 Python 方法上,并提供了一些额外的功能,比如自动解析请求数据和返回响应对象[^3]。 以下是 `APIView` 的一个简单示例: ```python from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status class StudentListCreateView(APIView): def get(self, request, format=None): students = Student.objects.all() serializer = StudentSerializer(students, many=True) return Response(serializer.data) def post(self, request, format=None): serializer = StudentSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) ``` 上述代码展示了如何使用 `APIView` 来实现学生的列表查询 (`GET`) 和新增操作 (`POST`) 功能。 --- #### 通用视图简介 除了 `APIView` 外,Django REST Framework 还提供了更高层次的通用视图(Generic View)。这些视图预设了许多常用功能,减少了开发者的重复工作量。常见的通用视图有以下几个类别: - **一级视图**:如 `ListAPIView`, `RetrieveAPIView` 等。 - **二级视图**:如 `GenericAPIView` 结合 Mixin 使用。 - **三级视图**:如 `ModelViewSet` 或者组合多个 Mixin 的视图。 ##### 示例:三级视图实现详情视图 以下是一个典型的三级视图实现案例,展示如何利用 DRF 的 `RetrieveAPIView`, `UpdateAPIView`, 和 `DestroyAPIView` 实现书籍详情页的操作: ```python from rest_framework.generics import RetrieveAPIView, UpdateAPIView, DestroyAPIView from .models import BookInfo from .serializers import BookInfoModelSerializer class BookDetailThirdView(RetrieveAPIView, UpdateAPIView, DestroyAPIView): queryset = BookInfo.objects.all() # 定义查询集 serializer_class = BookInfoModelSerializer # 配置序列化器 lookup_field = 'id' # 设置查找字段,默认为 pk ``` 这段代码实现了对单条记录的获取、更新和删除操作[^1]。 --- #### GenericViewSet 的应用 如果需要进一步简化代码结构,可以考虑使用 `GenericViewSet` 并结合 Mixin 来完成更多功能。例如,下面的例子演示了如何通过 `ListModelMixin` 和 `RetrieveModelMixin` 构建一个简单的资源集合接口: ```python from rest_framework.viewsets import GenericViewSet from rest_framework.mixins import ListModelMixin, RetrieveModelMixin from .models import MyModel from .serializers import MyModelSerializer class MyGenericViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet): queryset = MyModel.objects.all() # 查询所有模型实例 serializer_class = MyModelSerializer # 指定使用的序列化器 ``` 此方式适用于那些不需要完全支持 CRUD 操作但又希望保持模块化的场景[^4]。 --- #### 总结 Django 类视图是一种高效且优雅的方式来管理复杂的业务逻辑。无论是基础的 `APIView`,还是高级别的通用视图或者视图集,都能满足不同规模项目的实际需求。合理选用合适的视图类型能够显著提升开发效率与代码质量。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值