• 序列化组件写图书接口


    一、先建好表格

    models.py

    class Book(models.Model):
        nid = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        price = models.DecimalField(max_digits=5, decimal_places=2)
        publish_date = models.DateField()
    
        publish = models.ForeignKey(to='Publish', to_field='nid', on_delete=models.CASCADE)
        authors = models.ManyToManyField(to='Author')
    
    class Author(models.Model):
        nid = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        age = models.IntegerField()
        author_detail = models.OneToOneField(to='AuthorDatail', to_field='nid', unique=True, on_delete=models.CASCADE)
    
    
    class AuthorDatail(models.Model):
        nid = models.AutoField(primary_key=True)
        telephone = models.BigIntegerField()
        birthday = models.DateField()
        addr = models.CharField(max_length=64)
    
    
    class Publish(models.Model):
        nid = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        city = models.CharField(max_length=32)
        email = models.EmailField()

    二、写一个序列化类继承ModelSerializer

    新建myser.py文件

    from rest_framework import serializers
    from app01 import models
    
    class BookSerializers(serializers.ModelSerializer):
        class Meta:
            model = models.Book
            fields = '__all__'

    三、在视图函数使用序列化的类

    views.py:

    from rest_framework.views import APIView
    from app01 import models
    from app01.myser import BookSerializers
    from rest_framework.response import Response
    
    
    class Books(APIView):
        def get(self, request, *args, **kwargs):
            response = {'code': 100, 'msg': '查询成功'}
            ret = models.Book.objects.all()
            book_ser = BookSerializers(instance=ret, many=True)
            response['data'] = book_ser.data
            return Response(response)
    
        def post(self, request, *args, **kwargs):
            response = {'code': 100, 'msg': '新增成功'}
            book_ser = BookSerializers(data=request.data)
            if book_ser.is_valid():
                book_ser.save()
            else:
                response['code'] = 101
                response['msg'] = book_ser.errors   # 错误信息被response序列化出来返回前端
            return Response(response)
    
    
    class BookDetail(APIView):
        def get(self, request, id, **kwargs):  # id是有名分组传过来的id
            response = {'code': 100, 'msg': '查询成功'}
            ret = models.Book.objects.filter(pk=id).first()
            book_ser = BookSerializers(instance=ret, many=False)
            response['data'] = book_ser.data
            return Response(response)
    
        def put(self, request, id, **kwargs):
            response = {'code': 100, 'msg': '修改成功'}
            ret = models.Book.objects.filter(pk=id).first()
            book_ser = BookSerializers(instance=ret, data=request.data)  # 修改需要传两个参数
            if book_ser.is_valid():
                book_ser.save()  # 校验通过,如果不是空,调update方法, 如果是空,调create方法
                                 # 原因是ModelSerializer 重写了这两个方法
            else:
                response['code'] = 101
                response['msg'] = book_ser.errors
            return Response(response)
    
        def delete(self, request, id, **kwargs):
            response = {'code': 100, 'msg': '删除成功'}
            models.Book.objects.filter(pk=id).delete()
            return Response(response)

    urls.py

    url(r'^books/$', views.Books.as_view()),
    url(r'^books/(?P<id>d+)$', views.BookDetail.as_view()),

    演示:

    新增数据

    修改数据

  • 相关阅读:
    【软件工程】学期总结
    【操作系统】实验四 主存空间的分配和回收
    学术诚信与职业道德
    【软件工程】《构建之法》八、九、十章读后感
    【操作系统】实验三 进程调度模拟程序
    【软件工程】《构建之法》6-7章读后感
    【操作系统】实验二 作业调度模拟程序
    【软件工程】复利计算器--结对编程3.0评论博客
    复利计算器--结对编程2.0
    学习进度条
  • 原文地址:https://www.cnblogs.com/zhangguosheng1121/p/11128709.html
Copyright © 2020-2023  润新知