drf的APIView、GenericAPIView、GenericViewSet

2024-02-13 03:58

本文主要是介绍drf的APIView、GenericAPIView、GenericViewSet,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

drf(django rest framework)都很多api都可以实现listview的功能,对于他们的用法区别做了下总结。因为我也是初学者,也比较混乱,很多不全面或者不对的地方,欢迎指正。

详细内容见http://www.django-rest-framework.org/api-guide/generic-views/
从高到低的继承关系如下:

GenericViewSet(viewset)            -drfGenericAPIView(generics)       -drfAPIView(views)             -drfView                   -django

这些view之间的差异就引出了drf中另一个核心点mixin

mixin包括:CreateModelMixinListModelMixinRetrieveModelMixinUpdateModelMixinDestroyModelMixin

以ListModelMixin为例做区别,如果我们不去继承这个mixin它里面的这些方法的话。
就无法将get 和 list连接起来。无法连接,那么list中所作的所有功能都不能完成。过滤,分页都将享受不到。

RetrieveModelMixin对于具体的商品信息进行了获取,序列化。这个在后面的商品详情页会介绍到。

UpdateModelMixin中对于部分更新还是全部更新进行了判断。

DestroyModelMixin用来连接我们的delete方法,在我们delete时有一些必要的操作,如设置返回状态204等。

GenericAPIView 继承自APIView:新增加了过滤、分页、序列化
GenericAPIView结合各种mixin可以组合成ListAPIView、RetrieveAPIView、等等,新增了get、post等方法

image
GenericViewSet继承了GenericAPIView 和ViewSetMixin ,ViewSetMixin允许在url配置时进行绑定,例如使用router或者自己进行绑定

用法示例:

model.py

class Goods(models.Model):"""商品"""category = models.ForeignKey(GoodsCategory, verbose_name="商品类目")name = models.CharField(max_length=100, verbose_name="商品名")sold_num = models.IntegerField(default=0, verbose_name=

这篇关于drf的APIView、GenericAPIView、GenericViewSet的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/704431

相关文章

DRF——serializer中获取嵌套评论

drf的serializer获取嵌套评论 获取嵌套评论的关键思路 在处理嵌套评论的序列化时,一个重要的思路是利用字典来存储和管理嵌套关系。在您提供的代码中,descendant_dict 用于存储当前根评论下所有子孙评论的序列化数据。这个字典的键是评论的ID,值是包含评论数据的字典。由于Python字典中的值是引用,而不是值的拷贝,因此当您在循环中向某个评论的 children 列表中添加数据

DRF——pagination分页模块

文章目录 分页继承APIView类用法1.PageNumberPagination2.LimitOffsetPagination3.CursorPagination 继承GenericAPIView派生类用法1.PageNumberPagination2.LimitOffsetPagination3.CursorPagination 分页 在查看数据列表的API中,如果

DRF——router路由,parser解析器

文章目录 路由解析器1.JSONParser2.FormParser3.MultiPartParser4.FileUploadParser 路由 在之前进行drf开发时,对于路由我们一般进行两种配置: 视图继承APIView from django.urls import pathfrom app01 import viewsurlpatterns = [path('

django DRF增删改查

本文在django所有的增删改查样例使用的DRF框架序列化操作,并非是简单的orm操作。 目录 ORM介绍数据库设计原则DRF增删改操作高级查询原生sql处理 ORM介绍 Django ORM(Object-Relational Mapping,对象关系映射)是 Django 框架的一部分,它提供了一种高效的方式来查询和操作数据库,而无需编写原始的 SQL 语句。Django O

drf-jwt登录之后返回用户对象

前言 在登录验证之后,本想返回一个user对象到前端,可是在drf发送response的时候user对象就消失了,查看源码和文档之后才了解,drf默认只会返回token 验证对象返回User class CustomBackend(ModelBackend):"""自定义用户验证"""def authenticate(self, username=None, password=None, **k

drf开发常用工具函数总结(给请求封装通用参数、打印内置属性/方法、动态构建查找条件、yaml读取真正的环境变量、异常处理之自定义异常类和捕捉系统异常)

给请求封装通用参数 使用中间件 中间件可以在请求进入视图之前或响应返回给客户端之前执行代码。你可以创建一个自定义中间件来添加通用参数。 class CommonParamsMiddleware:def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):request

Django中drf动态过滤查询

Django中drf动态过滤查询 1、page.py 代码: from rest_framework.pagination import PageNumberPaginationclass UserPagination(PageNumberPagination):"""用户分页器"""page_size = 10 # 默认的页面数据数量page_query_param = 'page'

DRF渲染之异常处理

异常处理 【1 】引言 Django REST Framework 这个就是我们常常说的DRF APIView的dispatch方法: 当请求到达视图时,DRF 的 APIView 类会调用 dispatch 方法来处理请求。在 dispatch 方法中,有一个关键的步骤是处理异常。如果在视图类的方法执行过程中出现了异常,DRF 会捕获这个异常,并调用 self.handle_excepti

【三】DRF序列化进阶

序列化器的定义与使用 多表关联序列化 【1】准备工作 # settings.pyDATABASES = {'default': {# 数据库引擎选择使用MySQL'ENGINE': 'django.db.backends.mysql',# 指定数据库名字,需提前创建'NAME': 'books',# 指定数据库用户名'USER': 'root',# 指定数据库用户密码'PASSWORD':

Django REST framework(DRF)是什么?

Django REST framework(DRF)是什么? Django REST framework(简称DRF)是一个强大且灵活的工具包,用于构建Web API。它是基于Django(一个高级Python Web框架)构建的,提供了许多用于构建API的组件和工具,使得开发过程更加快速和简便。 主要特点: 功能丰富:支持ORM(对象关系映射)和非ORM数据源,序列化,分页,过滤,视