如果没什么逻辑,可以直接写在视图的类属性中,如果逻辑比较复杂,也可以重写get_queryset方法用来返回一个queryset对象。...serializer_class serializer_class用来验证和序列化数据的。也是可以通过直接设置这个属性,也可以通过重写get_serializer_class来实现。...lookup_field 在检索的时候,根据什么参数进行检索。默认是pk,也就是主键。 lookup_url_kwarg 在检索的url中的参数名称。...如果您需要根据传入请求提供不同的序列化,您可能需要重写它。...,告诉视图要针对哪个模型做处理 serializer_class = StudentModelSerializer # 定义类属性serlializer_class,告诉视图你的序列化的类是什么
GenericAPIView GenericAPIView继承自APIView,增加了对于列表视图和详情视图可能用到的通用支持方法。通常使用时,可搭配一个或多个Mixin扩展类。...如果您要覆盖视图方法,请务必调用get_queryset()而不是直接访问此属性。 serializer_class 应该用于验证和反序列化输入以及序列化输出的序列化器类。...(self): return BookInfo.objects.all() get_serializer_class(self) 返回序列化器类,默认返回serializer_class,可以重写...详情视图使用 get_object(self) 返回详情视图所需的模型类数据对象,默认使用lookup_field参数来过滤queryset。 在视图中可以调用该方法获取详情信息的模型类对象。...如果不清楚DRF分页器的,可以看这里 列表和新增视图 列表视图中,每次按照分页大小返回多个数据。如下图所示,我们使用百度搜索的时候,百度会以分页的形式给我们展示数据。
常见的子类除了APIView类之外,DRF还提供了许多其他的类视图,以便我们更方便地编写代码和扩展API。...以下是其中的一些:GenericAPIViewGenericAPIView是一个基于视图的通用类,提供了处理列表和详情视图的通用功能。...get_serializer_class(): 获取序列化器的方法。可以重写此方法来自定义序列化器。get_serializer(): 获取序列化器的实例。...): queryset = Article.objects.all() serializer_class = ArticleSerializer在这个例子中,我们定义了一个名为ArticleList...我们设置了queryset属性为所有Article对象,并设置了serializer_class属性为ArticleSerializer。
在APIView中仍以常规的类视图定义方法来实现get() 、post() 或者其他请求方式的方法。例如使用APIView简单的实现五个增删查改的API接口。...提供的关于序列化器使用的属性与方法 属性:serializer_class 指明视图使用的序列化器 方法: get_serializer_class(self) : 当出现一个视图类中调用多个序列化器时...,那么可以通过条件判断在get_serializer_class方法中通过返回不同的序列化器类名就可以让视图方法执行不同的序列化器对象了。...返回序列化器类,默认返回serializer_class,可以重写。...在试图中可以调用该方法获取详情信息的模型类对象。**若详情访问的模型类对象不存在,会返回404。
目录 DRF 视图组件 视图组件大纲 两个视图基本类 五个扩展类 九个子类视图 视图集 常用视图集父类 魔法类 一览表 DRF中视图的“七十二变” 第一层:基于APIview的五个接口 第一层五个接口demo...第二层:基于GenericAPIView的五个接口 常用类属性: 第二层五个接口demo 第三层:基于GenericAPIView+五个视图扩展类写 第三层五个接口demo GenericAPIView...魔法类 ViewSetMixin:控制自动生成路由 一览表 DRF中视图的“七十二变” 第一层是继承APIView写,第二层基于基于GenericAPIView写,第三层基于GenericAPIView...() # 通过lookup_field查询的 -get_serializer() # 使用它序列化 -get_serializer_class() # 返回序列化类 ,后期可能重写...return Author.objects.all() ··· # 这样序列化的数据就不一样了,根据不同的条件序列化不同的数据 '''当然还可以通过重写get_serializer_class
使用场景: 重写 get_serializer_class和get_queryset,根据不同的操作返回不同的序列化器类和不同的查询集。...= [MyPermission] 6.限流 作用:可以对接口访问的频次进行限制,以减轻服务器压力。...queryset = BookInfo.objects.all() serializer_class = BookInfoSerializer # 指定过滤字段,根据书名和阅读量过滤,还可以添加其他的过滤字段...8.1使用方法: 在类视图中设置filter_backends,使用 rest_framework.filters.OrderingFilter过滤器,REST framework会在请求的查询字符串参数中检查是否包含了...在视图中通过 pagination_clas属性来指明。
两个基类 1) APIView rest_framework.views.APIView APIView是REST framework提供的所有视图的基类,继承自Django的View父类...在APIView中仍以常规的类视图定义方法来实现get() 、post() 或者其他请求方式的方法。...支持定义的属性: 列表视图与详情视图通用 queryset 列表视图的查询集 serializer_class 视图使用的序列化器 列表视图使用 pagination_class 分页控制类...get_serializer_class(self) 返回序列化器类,默认返回serializer_class,可以重写,例如: def get_serializer_class(self):...在试图中可以调用该方法获取详情信息的模型类对象。 若详情访问的模型类对象不存在,会返回404。
GenericViewSet 二、扩展视图集 1.ModelViewSet 2.ReadOnlyModelViewSet 三、用法补充 1.扩展方法使用 前言 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中...扩展类提供的方法同名,所以我们可以通过继承Mixin扩展类来复用这些方法而无需自己编写。...param request: :return: """ # 1、查询图书表获取所有图书对象 self.get_queryset() 获取queryset属性中的所有数据...获取serializer_class所指定的序列化器进行初始化操作 ser = self.get_serializer(books, many=True) # 使用序列化器对象的...,我们还可以通过重写get_serializer或者get_queryset对 同一个类中的指定视图采用不同的queryset或者不同的序列化器 """ def get_queryset
1.2类视图的两个基类 1.2.1APIView 是View类的子类,在view类的基础上添加了一些额外的功能。...功能: 1.视图中的request对象不再是Django中 HttpRequest类的对象,而是由DRF框架封装成的 Request类的对象。...补充知识点: 1.类视图对象有一个属性: self.kwargs,它是一个字典,保存的是从url地址中提取的所有命名参数。...: serializer_class指定当前视图所使用的序列化器类。...b)方法: get_serializer创建一个视图所使用序列化器类的对象。 get_serializer_class返回当前视图所使用的序列化器类。
首先,我们看一下主要的几种view以及他们之间的关系。 ? 这其中,还涉及了mixins,主要也分为5类: ?...APIView对django本身的View进行封装,从上述的代码,这样分析,两者的差别看起来不是很大,但实际中APIView做了很多东西,它定义了很多属性与方法,举几个例子 # 这三个是常用的属性...GenericAPIView对APIView再次封装,实现了强大功能: 加入queryset属性,可以直接设置这个属性,不必再将实例化的courses,再次传给seriliazer,系统会自动检测到。...加入serializer_class属性与实现get_serializer_class()方法。...): # 重写get_serializer_class方法 if self.action == 'list': return CourseSerializer
首先,我们看一下主要的几种view以及他们之间的关系。 ? 这其中,还涉及了mixins,主要也分为5类: ? 下面我们以课程(course)作为一个例子,对view进行一个总结。...APIView对django本身的View进行封装,从上述的代码,这样分析,两者的差别看起来不是很大,但实际中APIView做了很多东西,它定义了很多属性与方法,举几个例子 # 这三个是常用的属性...GenericAPIView对APIView再次封装,实现了强大功能: 加入queryset属性,可以直接设置这个属性,不必再将实例化的courses,再次传给seriliazer,系统会自动检测到。...加入serializer_class属性与实现get_serializer_class()方法。...# 重写get_serializer_class方法 if self.action == 'list': return CourseSerializer
实际上,实现各个 action 逻辑的混入类都非常简单,以 RetrieveModelMixin 为例,我们来看看它的源码: class RetrieveModelMixin: """...lookup_field 属性指定的资源筛选字段(默认为 pk)。django-rest-framework 以该字段的值从 get_queryset 返回的资源列表中筛选出单个资源对象。...类似于视图集类的 queryset 属性和 get_queryset 方法的关系, serializer_class 属性的值也可以通过 get_serializer_class 方法返回的值覆盖,因此我们可以根据不同的...那么如何在视图集中区分不同的 action 动作呢?视图集有一个 action 属性,专门用来记录当前请求对应的动作。...destory 因此,我们在视图集中重写 get_serializer_class 方法,写入我们自己的逻辑,就可以根据不同请求,分别获取相应的序列化器了: class PostViewSet(
1) API策略属性 以下的API策略属性应用于APIView,控制视图的策略: renderer_classes: 渲染器类 parser_classes: 解释器类 authentication_classes...通用视图可以设置一些类属性在通用视图内,也可以根据特殊要写重写它的内部视图方法 使用.as_views()来转换成视图函数 url(r’^/users/’, ListCreateAPIView.as_view...通常情况下,你必须设置这个属性,或重写get_serializer_class()方法。...,ViewSet类是一个简单类型的基于类的观点,没有提供任何方法处理程序如.get()或. post(), 而代替提供方法比如.list()和create()。...ViewSet同样不提供具体行为方法的实现,可以重写和定义一些请求处理方法。 而代替了原来APIVIew的POST,GET等方法,取而代之的是list,create等方法。
反向指定 父表中默认不会生产关联字段(从表),可以手动指定,字段名默认为子表模型类名「小写_set」 projects.serializer.ProjectModelSerializer中添加 interfaces_set...优化视图-请求 from rest_framework.views import APIView 当视图继承 APIView之后,请求实例方法中的第二个参数 request为 Request对象,是对Django...中的 HttpRequest对象进行的拓展 ?...Request 对Django中的HttpRequest进行拓展 根据请求头中的Content-Type自动进行解析 无论前端发送那种格式数据,都可以以相同的方式读取 request.data 类似于Django...模版名称,使用HTMLRenderer渲染时需要指明 headers 用于存放响应头信息的字典 content_type 响应头中的Content-Type 通常此参数无需设置,会自动根据前端所需类型数据来设置该参数
属性 请求数据体,类似于Django的request.POST, request.FILES 在DRF中主要指的是Json query_params 所有传入的关键字 api.tulingxueyuan.com...- 4xx: 请求错误 - 5xx: 服务器错误视图类APIViewrest_framework.views.APIView是django中View的子类跟View有不同的地方传入传出数据用的是...drf的请求和反馈类会引发并处理APIException在dispatch之前,会进行身份验证,权限检查,流量控制支持的属性有authentication_classes: 列表或者元祖,身份验证类...的子类 - 支持的属性 - queryset:查询结果集 - serializer_class: 视图使用的序列化器 - panination_class...- get_serializer_class:得到序列化器类 - get_serializer: 得到序列化器ListModelMixinlist(reqeust, *args, **
GenericAPIView 是 Django REST Framework (DRF) 中的一个基础视图类,它继承自 APIView,并添加了一些常用的功能,特别是与数据库模型交互的功能。...序列化器(serializer_class)与 get_serializer()serializer_class 属性:指定用于序列化和反序列化的类。...class BookView(GenericAPIView): serializer_class = BookSerializerget_serializer_class() 方法:允许根据不同情况返回不同的序列化器类...def get_serializer_class(self): """根据请求方法和用户角色返回不同的序列化器""" # 管理员使用完整序列化器 if self.request.user.is_staff...对象查找(lookup_field 和 lookup_url_kwarg)这两个属性控制如何从 URL 中获取单个对象。lookup_field:模型中用于查找对象的字段名,默认为 'pk'。
1.配置 有两种配置方案,一种是在settings中全局配置,第二种是在视图中指定,不过此方法一般不使用,因为版本控制大部分情况下是全局的处理情况 1.1全局配置 settings.py: REST_FRAMEWORK...一般不修改 1.2视图配置 views.py # 仅仅指定 版本控制类 class ProfileList(APIView): # 指定 版本控制类 versioning_class...) serializer_class = BookSerializer def get_serializer_class(self): if self.request.version...唯一的区别是,它是如何在 Django 应用程序中配置的,因为它使用URL conf中的命名空间而不是URL conf中的关键字参数。 ...使用此方案,request.version属性是根据与传入请求的路径匹配的 namespace 确定的。
ModelViewSetModelViewSet是一个基于视图集的通用类,提供了处理CRUD操作的通用功能。...get_object(): 获取单个对象的方法。可以重写此方法来自定义获取对象的逻辑。get_serializer_class(): 获取序列化器的方法。可以重写此方法来自定义序列化器。...): queryset = Article.objects.all() serializer_class = ArticleSerializer在这个例子中,我们定义了一个名为ArticleViewSet...的视图,并继承了DRF的ModelViewSet类。...我们设置了queryset属性为所有Article对象,并设置了serializer_class属性为ArticleSerializer。
django rest framework了 5.3.APIview方式实现商品列表页 (1)安装 pip install coreapi drf的文档支持...,封装了很多方法,比APIView功能更强大 class GenericAPIView(views.APIView): """ Base class for all other generic...= GoodsSerializer settings.py里面就不用设置了 5.7.viewsets和router完成商品列表页 主要用到viewsets中的GenericViewSet 再看下ViewSerMixin...的APIView、GenericView、viewsets和router的原理分析 genericViewSet 是最高的一层 往下 GenericViewSet(viewsets) ----drf...还有其它几个mixin(增删改查局部),这些功能都是mixin做的 我们一般都是用viewsets ViewSet类与View类其实几乎是相同的,但提供的是read或update这些操作,而不是get
继承基本View,拥有View所有的功能 重写了as_view()方法,禁用了csrf认证 重写dispatch,封装请求、响应、渲染、异常、解析、三大认证模块 封装一堆属性,可完成视图类的局部配置...方法:配置queryset类属性,群查获取QuerySet对象 提供get_object方法:配置lookup_url_kwarg类属性,单查获取单个对象 提供get_serializer方法:配置serializer_class...类属性,提供序列化类并使用自定义的序列化类序列化 总结:GenericAPIView就是在APIView基础上额外提供了三个方法和三个类属性,如果不配合视图工具类,则体现不出来优势所在 使用它的好处:视图中的增删改查逻辑其实大差不差...# 删除接口一般是自己实现重写到的,因为真正的业务不需要真正的删除 pass # django源代码中是真的删除 return self.destroy..., *args, **kwargs): pass 视图集 viewsets 重写as_view方法,增加action参数(可以完成路由层的请求方法映射关系) 可以在路由层中自定义请求方法的映射关系
领取专属 10元无门槛券
手把手带您无忧上云