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'] '''