Django rest_fram_work API View序列化 APIview

单表的GET和POST:

视图

查询所有:

class PublishView(APIView):
    # 查询数据
    def get(self, request):
        # first inquire database
        publish = models.Publisher.objects.all()
        # data put serializers data packging
        bs = PublishModelSerializers(publish, many=True)  # many=True多个对象
        # return
        return Response(bs.data)

    # 增加数据
    def post(self, request):
        bs = PublishModelSerializers(data=request.data,many=True)  # post不需要定义many=Ture

        if bs.is_valid():
            bs.save()  # 保存
            return Response("添加成功")
        else:
            return Response("增加失败")

查询单条:

class PublishDetaiView(APIView):
    # 将这个pk设置成和lookup_url_kwarg='pk' 一样的值,不然加后缀会取不到值
    def get(self, request, id):  # id 不要放到request前面
        # 查询数据库
        publish = models.Publisher.objects.filter(pk=id)
        # 封装打包序列化数据
        bs = PublishModelSerializers(publish,many=True)  # many=True多个对象
        print(bs, 6666666666666666666666666)
        # Response 会直接返回josn数据格式
        ret = Response(bs.data)

        return ret

    # #  修改数据(前端指定id值后,在data中输入k:v即可change数据)
    def put(self, request, id):
        # inquire database
        publish = models.Publisher.objects.filter(pk=id).first()
        # data=  form request.data client
        ps = PublishModelSerializers(publish, data=request.data)
        # if ps pass verify
        if ps.is_valid():
            ps.save()
            return Response(ps.data)
        else:
            return Response(ps.errors)

    # 删除数据(功能还未实现)
    def delete(self, request, id):
        print(type(id),5555555555555)
        models.Publisher.objects.filter(id=id).delete()
        return Response("删除成功")

外键的GET和POST:

视图

查询所有:

# 多条数据
class BookView(APIView):
    def get(self, request, *args, **kwargs):
        book_list = models.Book.objects.all()
        # context十分关键,如果不将request传递给它,在序列化的时候,图片与文件这些Field不会再前面加上域名,也就是说,只会有/media/img...这样的路径!
        bs = BookModelSerializers(instance=book_list, many=True, context={'request': request})  # 在做链接的时候需要添加context参数
        print(bs)
        # 默认就返回json格式的字符串
        return Response(bs.data)

    # 增加数据
    def post(self, request):
        bs = BookModelSerializers(data=request.data)  # post不需要定义many=Ture
        if bs.is_valid():
            bs.save()  # 保存
            return Response("添加成功")
        else:
            return Response("增加失败")

查询单条:

# 单条数据
class BookDetaiView(APIView):
    # inquire database
    def get(self, request, id, *args, **kwargs):
        book_list = models.Book.objects.filter(id=id)
        bs = BookModelSerializers(instance=book_list, many=True, context={'request': request})  # 在做链接的时候需要添加context参数
        # 默认就返回json格式的字符串
        return Response(bs.data)

    def put(self, request, id, *args, **kwargs):
        book = models.Book.objects.filter(pk=id).first()
        bs = BookModelSerializers(book, data=request.data)  # 单条数据不能使用 many = Ture
        if bs.is_valid():
            bs.save()
            return Response("添加成功")
            # return Response(bs.data)  # 一般用这个
        else:
            return Response("添加失败")
            # return Response(bs.errors) # 一般用这个

    def delete(self, request, id):
        models.Book.objects.filter(pk=id).delete()
        return Response("删除成功")