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