Django的视图分为基于类的视图(CBV)和基于函数的视图(FBV),在DRF里面这两种视图都可以使用。
基于函数的视图FBV
@api_view(http_method_names=['GET'])
api_view是一个装饰器,用 http_method_names 来设置视图允许响应的 HTTP 方法列表
@api_view(['GET', 'POST'])
def hello_world(request):
if request.method == 'POST':
return Response({"message": "Got some data!", "data": request.data})
return Response({"message": "Hello, world!"})
基于类的视图CBV
REST framework 提供了一个 APIView 类,它继承于 Django 的 View 类,同时提供的通用视图快速构建紧密映射到数据库模型的 API 视图。如果通用视图不符合需求,可以使用常规的 APIView 类,或者利用 mixin 特性和基类组合出可重用的视图。
具体方法参考链接
CreateModelMixin, GenericAPIView
# 创建一本图书
class BookCreateView(CreateModelMixin, GenericAPIView):
serializer_class = BookSerializer
def post(self, request):
return self.create(request)
mixin 类用于提供基本视图行为的操作,mixins⾥⾯对应了ListModelMixin,CreateModelMixin,RetrieveModelMixin, UpdateModelMixin ,DestroyModelMixin。
CreateModelMixin提供 .create(request, *args, **kwargs) 方法,实现创建和保存新模型实例。
GenericAPIView:继承⾃APIView,增加了对列表视图或者详情视图可能⽤到的通
⽤⽀持⽅法。通常使⽤时,可搭配⼀个或者多个Mixin扩展类。
serializer_class - 用于验证和反序列化输入以及序列化输出的序列化类。
queryset 查询结果集
CreateAPIView
用于创建实例。提供一个 post 请求的处理方法。
# 创建一本书
class BookCreateView(CreateAPIView):
serializer_class = BookSerializer
RetrieveAPIView
仅用于查询单个模型实例。提供一个 get 请求的处理方法。
# 查询一本书
class BookRetriveView(RetrieveAPIView):
queryset = Bookinfo.objects.all()
serializer_class = BookSerializer
通用视图继承关系图