zoukankan      html  css  js  c++  java
  • 序列化组件写图书接口

    一、先建好表格

    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()),

    演示:

    新增数据

    修改数据

  • 相关阅读:
    在VMware 虚拟机中彻底删除linux系统
    Linux中安装MySQL5.7和查看启动状态
    VMware启动时提示我已移动或我已复制该虚拟机
    Linux中查看MySQL版本启动默认安装位置
    linux 下查看redis是否启动和启动命令
    Linux中查看redis版本
    maven下载依赖失败解决方案
    《痞子衡嵌入式半月刊》 第 27 期
    痞子衡嵌入式:盘点国内车规级MCU厂商
    痞子衡嵌入式:盘点国内Cortex-M内核MCU厂商高性能产品
  • 原文地址:https://www.cnblogs.com/zhangguosheng1121/p/11128709.html
Copyright © 2011-2022 走看看