Django REST framework 中的APIView

  • framework 中的APIView 是REST framework 中所有视图的基类。它继承django 的View。
  • 它的request 对象和reposen 不同于django 的request 和 HttpRequest。
  • request.data可以获取返回解析之后的请求体数据
  • request.query_params 可以获取查询字符串的数据 和django 的request.GET是一样。
  • Response 提供了json 和 BrowsableAPI 渲染器。
  • 区分序列化和反序列化的在代码中是由序列化器的传参决定的
序列化器(data)执行序列化,序列化器(data=data) 反序列化。
可以这样理解序列化就是模型转json ,反序列化json 转模型

restful API 设计

路由:

 path("books/",views.BooksView.as_view()),
 re_path("books/(?P\d+)/",views.BookView.as_view()),
  • 视图:
class BooksView(APIView):
    def get(self,request):
        query_param = request.query_params
        item = request.GET # 方法和query_param一样
        print(item)
        print(query_param)
        queryset=BookInfo.objects.all()
        serializer = BookInfoSerializer(queryset,many=True) # 序列化
        return Response(serializer.data)

    def post(self,request):
        data = request.data # 获取前段传过来的数据 有序字典
        item1 = request.query_params
        print(item1)
        serializer = BookInfoSerializer(data=data) # 进行反序列化
        if serializer.is_valid() is False:
            print(serializer.errors) # 获取校验失败的数据
        data = serializer.validated_data  # 获取校验成功之后的数据
        print(data)
        BookInfo.objects.create(**data) # 新增数据
        return Response(serializer.data)
class BookView(APIView):
    def get(self,request,pk):
        try:
            data = BookInfo.objects.get(pk=pk)
        except BookInfo.DoesNotExist:
            return Response(status=404)
        serializer = BookInfoSerializer(data)
        return Response(serializer.data)
    def put(self,request,pk):
        try:
            book = BookInfo.objects.get(pk=pk)
        except BookInfo.DoesNotExist:
            return Response("this book is not exist",status=404)
        data = request.data # 获取数据
        serializer = BookInfoSerializer(data=data) #反序列化
        serializer.is_valid(raise_exception=True)
        data=serializer.validated_data
        book.btitle = data["btitle"]
        bpub_date = datetime.strptime(str(data.get("bpub_date")), "%Y-%m-%d").date()
        book.bpub_date = bpub_date
        book.save()
        return Response(data,status=200)
    def delete(self,request,pk):
        try:
            book = BookInfo.objects.get(pk=pk)
        except BookInfo.DoesNotExist:
            return Response("this book is not exist",status=404)
        book.delete()

        return Response("The book has been deleted",status=200)

你可能感兴趣的:(django)