Django--视图集ViewSet

本文详细介绍了Django REST framework中ViewSet与GenericViewSet的使用方法,包括如何通过继承ViewSetMixin实现as_view()字典映射,以及如何利用GenericViewSet搭配Mixin扩展类提供基础API方法。同时,文中还展示了如何在视图集中定义附加action动作,以实现更丰富的功能。

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

 

ViewSet主要通过继承ViewSetMixin来实现在调用as_view()时传入字典(如{'get':'list'})的映射处理工作。

常用的视图集父类

GenericViewSet  继承自GenericAPIViewViewSetMixin,在实现了调用as_view()时传入字典(如{'get':'list'})的映射处理工作的同时,还提供了GenericAPIView提供的基础方法,可以直接搭配Mixin扩展类使用。

from rest_framework import mixins
from rest_framework.viewsets import GenericViewSet
class BookInfoViewSet(mixins.ListModelMixin,mixins.RetrieveModelMixin,GenericViewSet):
    """使用GenericViewSet实现返回列表和单一值"""

    # 指定序列化器
    serializer_class =  BookInfoSerializer
    # 制定查询集
    queryset = BookInfo.objects.all()

url设置:

url(r'^books/$', new_views.BookInfoViewSet.as_view({'get':'list'})),
url(r'^books/(?P<pk>\d+)/$', new_views.BookInfoViewSet.as_view({'get':'retrieve'})),

执行结果:

 

 视图集中定义附加action动作


    def latest(self, request):
        """
        返回最新的图书信息
        GET /books/latest
        """
        book = BookInfo.objects.latest('id')
        serializer = self.get_serializer(book)
        return Response(serializer.data)

    def read(self, request, pk):
        """
        修改图书的阅读量数据
        PUT /books/<pk>/read/  遵循REST设计风格的url命名方式
        """
        book = self.get_object()
        book.bread = request.data.get('read')
        book.save()
        serializer = self.get_serializer(book)
        return Response(serializer.data)

 url设置:

url(r"^books/latest/$",new_views.BookInfoViewSet.as_view({'get':'latest'})),
url(r"^books/(?P<pk>\d+)/read/$",new_views.BookInfoViewSet.as_view({'put':'read'})),

执行效果:

 read 路由发送put请求,第一次报错,我们将字典清空,添加'read':222 在刷新就成功了

 

 

### 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值