DRF之视图家族

一:GenericAPIView

(1)特点:

  (1)其继承APIVies,使用完全兼容APIView

  (2)其在APIView之上又添加了新的功能

(2)使用方式

(3)单取

# 路由层
urlpatterns = [
    url(r‘^v2/books/$‘, views.BookGenericAPIView.as_view()),
    url(r‘^v2/books/(?P<pk>.*)/$‘, views.BookGenericAPIView.as_view()),
]
 # 视图层def get(self, request, *args, **kwargs):
        # 传统的群查方式  单查同样 此处不列举
        book_query = models.Book.objects.all().filter(is_delete=False)
        book_ser = serializers.BookModelSerializer(book_query, many=True)
        data = book_ser.data
        return APIResponse(results=data)
def get(self, request, *args, **kwargs):    # GenericAPIView 方式取值    book_query = self.get_queryset()  # 获取序列化对象    book_ser = self.get_serializer(book_query,many=True)  # 进行序列化    book_data = book_ser.data   # 获取数据    return APIResponse(results=book_data)

PS:

  (1)此种方式会报错 没有获取queryset对象

  (2)没有获取序列化类

    queryset = models.Book.objects.filter(is_delete=False)
    serializer_class = serializers.BookModelSerializer
    def get(self, request, *args, **kwargs):

        # GenericAPIView 方式取值
        book_query = self.get_queryset()  # 获取序列化对象
        book_ser = self.get_serializer(book_query,many=True)  # 进行序列化
        book_data = book_ser.data   # 获取数据
        return APIResponse(results=book_data)

PS:

(1)get_queryset():从类属性queryset中获得model的queryset数据
  (2)get_object():从类属性queryset中获得model的queryset数据,再通过有名分组pk确定唯一操作对象
  (3)get_serializer():从类属性serializer_class中获得serializer的序列化类

# 单取
    lookup_field = ‘pk‘  # 可以通过该方法自定义主键名称
    def get(self, request, *args, **kwargs):
        book_query = self.get_object()
        book_ser = self.get_serializer(book_query)
        book_data = book_ser.data
        return APIResponse(results=book_data)

原文地址:https://www.cnblogs.com/SR-Program/p/11706332.html

时间: 2024-08-30 18:21:05

DRF之视图家族的相关文章

drf的视图家族

一.昨日内容复习 """ 1.(重点)二次封装Response:自定义APIResponse继承Response,重写__init__方法 2.(正常)设置了abstract为True的模型类,称之为基表,这样的模型类是专门作为基类来提供公有属性的序列 3.(重点)ORM多表关联操作: 外键所放位置 一对多:外键放在多的一方 多对多:外键放在常用的一方 一对一:外键放在不常用的一方 外键字段为正向查询字段,related_name是反向查询字段 外键如何断关联 设置外键字段d

drf视图家族

视图类给序列化类传参 Response({ 'status': 0, 'msg': 'ok', 'results': [], 'token': '' # 有这样的额外的key-value数据结果 },status=http_status,headers=headers,exception=True|False) APIResponse() => Response({'status': 0,'msg': 'ok'}) from rest_framework.response import Resp

drf序列化高级、自定义只读只写、序列化覆盖字段、二次封装Response、数据库查询优化(断关联)、十大接口、视图家族、自动补全图片链接

目录 自定义只读 自定义只写 序列化覆盖字段 二次封装Response 数据库关系分析 断外键关联关系 ORM操作外键关系 ORM四种关联关系 基表 序列化类其他配置(了解) 十大接口 BaseSerializer初始化方法 十大接口序列化总结 单查群查 单增群增 单删群删 单整体改/群整体改 单局部改/群局部改 群增群改配置 十大接口小结 字段提供就校验,不提供拉到 DjangoORM内置优化机制:一次最多查21条数据 models.py response.py serializers.py

DRF的视图和路由

DRF的视图 APIView 我们django中写CBV的时候继承的是View,rest_framework继承的是APIView,那么他们两个有什么不同呢~~~ urlpatterns = [     url(r'^book$', BookView.as_view()),     url(r'^book/(?P<id>\d+)$', BookEditView.as_view()), ] 我们可以看到,不管是View还是APIView最开始调用的都是as_view()方法~~那我们走进源码看看

视图家族

视图家族 GenericAPIView基类 # GenericAPIView是继承APIView的,使用完全兼容APIView # 重点:GenericAPIView在APIView基础上完成了哪些事 # 1)get_queryset():从类属性queryset中获得model的queryset数据 # 2)get_object():从类属性queryset中获得model的queryset数据,再通过有名分组pk确定唯一操作对象 # 3)get_serializer():从类属性serial

77-drf视图家族及路由层补充

目录 视图家族 一.views视图类 1.APIView类 2.GenericAPIView类(generics中) 二.mixins类:视图辅助工具 1.RetrieveModelMixin 2.ListModelMixin 3.CreateModelMixin 4.UpdateModelMixin 5.DestroyModelMixin 三.generics类:包含辅助工具的通用视图类 四.viewsets视图集 1.作用 2.如何使用 3.ModelViewSet的不合理之处及解决方法 路

Django rest-framework视图家族

目录 视图家族 视图类 GenericAPIView APIView GenericAPIView 使用GenericAPIView类 视图工具类 mixins 五大工具类 六大工具方法 使用mixins的六大工具方法 工具视图类 generics 使用generics的工具类实现接口 视图集 viewsets 使用viewsets的视图集类实现接口 完善viewsets的视图集类实现接口 实现群增,群整体改,群局部改,群删四个接口 实现删除只做字段的修改 实现返回信息包含数据状态码和状态信息

序列化类外键字段的覆盖,十大接口序列化总结,视图家族

序列化类外键字段的覆盖 """ 1)在序列化类中自定义字段,名字与model类中属性名一致,就称之为覆盖操作 (覆盖的是属性的所有规则:extra_kwargs中指定的简易规则.model字段提供的默认规则.数据库唯一约束等哪些规则) 2)外键覆盖字段用PrimaryKeyRelatedField来实现,可以做到只读.只写.可读可写三种形式 只读:read_only=True 只写:queryset=关联表的queryset, write_only=True 可读可写:que

DRF之视图组件

一.知识回顾: 1.RESTful api接口规范 (1).REST最重要的一句话: url用来唯一定位资源,http请求方式用来定位用户行为. (2).设计RESTful api 2.混入类, 多继承 (1).我有一个Animal类,它包含如下方法: class Animal(object): def eat(self): print("Eat") def walk(self): print("Walk") def sleep(self): print("