Django-restframework之视图类详解

本文深入探讨Django Rest Framework(DRF)中的视图类和扩展类,包括ModelViewSet、GenericAPIView、APIView及mimins扩展类的使用方法与特性。详细解析了各视图类的功能,如增删改查、自定义逻辑实现等,以及如何通过扩展类快速实现列表、创建、检索、更新和删除等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

视图:
视图函数继承表

             |->mixins.CreateModelMixin,    POST创建
             |->mixins.RetrieveModelMixin,  Retrieve(get)显示单条   
ModelViewSet |->mixins.UpdateModelMixin,    put,patch更新
             |->mixins.DestroyModelMixin,   destory 删除
             |->mixins.ListModelMixin,      list(get) 查询所有 
             |                              |->ViewSetMixin
             |->GenericViewSet              |   
                                            |->generics.GenericAPIView|->views.APIView|->View

自定义视图:
1、如果只是要执行增删改查,继承ModelViewSet即可实现
2、如果要执行增删改查其中的几项的话,可以只继承mimins.xxx
3、如果要执行复杂逻辑的话,可以继承GenericAPIView或者APIView,实现自己的逻辑操作

from rest_framework.viewsets import ModelViewSet    
from rest_framework.pagination import PageNumberPagination        
class xxx(ModelViewSet):
    #查询结果集
    queryset = models.XXX.objects.all()
    #序列化的类
    serializer_class = xxxxx
    #分页的类
    pagination_class = PageNumberPagination

一:GenericAPIView,继承自APIView, 可以搭配扩展类使用,特点如下:

1、定义类视图使用的序列化器和查询集(属性);

  • queryset 列表视图的查询集 (queryset = xxx)

  • serializer_class 视图使用的序列化器(serializer_class = sss)

2、分页和过滤的控制(属性);

  • pagination_class 分页控制类

  • filter_backends 过滤控制后端

3、配合get_obiect()使用的(属性);

  • lookup_field 查询单一数据库对象时使用的条件字段,默认为’pk’
  • lookup_url_kwarg 查询单一数据时URL中的参数关键字名称,默认与look_field相同

4、查询集的获取/更改:

  • get_queryset(self) :默认返回queryset属性,可以重写成自己需要的查询集;

5、获取序列化器对象:

  • get_serializer:默认返回的是系列化器对象;

  • 注意,在提供序列化器对象的时候,REST
    framework会向对象的context属性补充三个数据:request、format、view,这三个数据对象可以在定义序列化器时使用,也就是说在序列化器类中,可以通过self.context[‘request’],获取对应的请求对象

6、context属性:

  • get_serializer_context(self):
  • 这个是给序列化器返回的一个context属性,context属性里面有‘request’,‘format’,‘view’值可以在序列化器类中使用。与5中的描述相对应

7、获取序列化器;

  • get_serializer_class(self):获取需要使用的序列化器,根据需求可以重写获取不同的序列化器;

8、获取对应的模型类对象:

  • get_object(self): 默认使用lookup_field参数来过滤queryset。
    若详情访问的模型类对象不存在,会返回404。
    该方法会默认使用APIView提供的check_object_permissions方法检查当前对象是否有权限被访问。
    二:另外的扩展类

1、ListModelMixin

列表视图扩展类,提供list(request, args, *kwargs)方法快速实现列表视图(所有数据),返回200状态码。
该Mixin的list方法会对数据进行过滤和分页
,如果不需要分页,那么需要设置pagination_class=None

2、CreateModelMixin

创建视图扩展类,提供create(request, *args, **kwargs)方法快速实现创建资源的视图,成功返回201状态码。

3、RetrieveModelMixin

详情视图扩展类,提供retrieve(request, *args, **kwargs)方法,可以快速实现返回一个存在的数据对象。
如果存在,返回200, 否则返回404

4、UpdateModelMixin

更新视图扩展类,提供update(request, *args, **kwargs)方法,可以快速实现更新一个存在的数据对象。
同时也提供partial_update(request, *args, **kwargs)方法,可以实现局部更新。 成功返回200,序列化器校验数据失败时,返回400错误。

5、DestroyModelMixin

删除视图扩展类,提供destroy(request, *args, **kwargs)方法,可以快速实现删除一个存在的数据对象。
成功返回204,不存在返回404。

### Django REST Framework 详细介绍 Django REST Framework(DRF)是一个强大且灵活的工具包,专为构建基于Django的Web API而设计[^1]。DRF不仅简化了RESTful API的开发过程,还提供了一系列特性来增强API的功能性和安全性。 #### 主要特点 - **可浏览的API**:DRF允许开发者创建易于使用的浏览器友好的API界面,方便测试和调试。 - **序列化支持**:内置强大的序列化机制可以轻松转换复杂的数据结构到JSON或其他格式。 - **身份验证与授权**:提供了多种认证方式以及细粒度的权限控制系统。 - **分页处理**:自动实现数据列表的结果分页显示。 - **版本管理**:帮助维护不同版本之间的兼容性变化。 #### 安装配置 为了开始使用DRF,在项目环境中安装`djangorestframework`库即可: ```bash pip install djangorestframework ``` 接着在项目的`settings.py`文件中添加应用程序名称至INSTALLED_APPS列表内: ```python INSTALLED_APPS = [ ... 'rest_framework', ] ``` #### 基本概念 ##### ViewSets 和 Routers 通过定义视图集(ViewSet),能够更简洁地映射HTTP方法到相应的操作上;路由(Router)则负责自动生成URL模式并将其关联到这些视图集中[^5]。 例如,在`views.py`里声明一个名为`BookInfoViewSet`的视图集合,并利用默认路由器注册该视图: ```python from rest_framework import viewsets, routers from .models import BookInfo from .serializers import BookSerializer class BookInfoViewSet(viewsets.ModelViewSet): queryset = BookInfo.objects.all() serializer_class = BookSerializer router = routers.DefaultRouter() router.register(r'books', BookInfoViewSet) ``` 随后只需将上述代码中的`router.urls`加入到主urls配置当中便可完成整个流程设置。 #### 认证插件推荐 对于需要加强安全性的应用场景来说,建议采用`djangorestframework-simplejwt`作为JWT令牌的身份验证方案之一[^3]。此扩展模块实现了对JSON Web Tokens的支持,适用于保护敏感资源免受未授权访问的影响。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的狮王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值