DRF 视图集合说明(APIView,GenericAPIView)

REST framework 提供了众多的通用视图基类与扩展类,以简化视图的编写。
REST framework 与请求类型相关联,只有符合 DRF需要的请求类型才能调用视图函数
1,APIView 主要是封装了request 与 HttpRequeset 对象!
视图图会为响应数据设置(render)符合前端要求的格式;
2,GenericAPIView 是 APIView 的子类
'''
    1) 会自带查询集合,也就是 序列化指定的
         #自带的查询集 Address.objects.all()
         class Meta:
            model = Address
            exclude = ('user', 'is_deleted', 'create_time', 'update_time')

        一般会根据需求自定义查询集,来精确的得到想要的数据!
        # 第一种指定查询集的方式!
        queryset = Area.objects.filter(parent_id=None)

        # 第二种指定查询集合的方式!
        # def get_queryset(self):
        #     return Area.objects.filter(parent_id=None)
'''
2) get_object() 方法会自动根据传参来精准获取到查询集
 #url(r'^addresses/(?P<pk>\d+)/$', views.AddressViewSet.as_view()),
        def delete(self, request, *args, **kwargs):
            # 如果有 pk 值那么就会按照pk值进行查找!
            address = self.get_object()
            # 进行逻辑删除
            address.is_deleted = True
            address.save()

            return Response(status=status.HTTP_204_NO_CONTENT)
3,get_serializer(self, args, *kwargs) 获取序列化器对象!
4,在提供序列化器对象的时候,REST framework会向对象的context属性补充三个数据:
request、format、view,这三个数据对象可以在定义序列化器时使用。
      '''
        #在序列化器之中取出 user 属性
        def create(self, validated_data):
            validated_data['user'] = self.context['request'].user
            return super().create(validated_data)
'''
试图与序列化器进行交互
'''
        #视图传递给序列化器 data属性
        def get(self, request, mobile):
            # request.query_params 是将url 上的地址转换成字典形式
            # 获取序列化对象,将前端传数据进行序列化校检! get_serializer 方法增加三种对象
            ser = self.get_serializer(data=request.query_params)
            # 验证不通过抛出错误!返回400错误。
            ser.is_valid(raise_exception=True)

        序列化器取出前端传递数据
        #view 存放的是试图传递给序列化器的参数!
        mobile = self.context['view'].kwargs['mobile']
            '''

 

posted @ 2018-06-24 17:13  十七楼的羊  阅读(126)  评论(0编辑  收藏  举报