zoukankan      html  css  js  c++  java
  • 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("删除成功")
  • 相关阅读:
    《大道至简》读后感
    第一周学习总结-Java
    c++与java的几个不同点
    单调队列 滑动窗口模型
    计算空间
    关于dp初始化问题
    康托展开小结-
    Vm-Ubuntu下配置Qt开发环境
    C++学习013多态
    C++学习012友元
  • 原文地址:https://www.cnblogs.com/Rivend/p/12057767.html
Copyright © 2011-2022 走看看