Serializer和ModelSerializer的使用

2021年09月15日 阅读数:3
这篇文章主要向大家介绍Serializer和ModelSerializer的使用,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

Django REST Framework API返回结果解析

学习了以前的文章咱们知道如何使用Django REST framework框架设计API,我还使用Schools APP设计了一个APIhtml

1.png

除此以外,咱们还能够查看API的OPTIONS,而后能够得不少信息,好比说第一行请求行'HTTP 200 OK',表示请求成功,第二行Allow表示容许的请求方式,Content-Type:application/json表示发送端发送的实体数据的数据类型。
还有下面的json数据,name表示接口名字、description详细描述、renders表示可解析的形式,parses是服务器端可解析的三种方式前端

2.png

咱们还能够在app的views.py的类中能够给API添加注释,如比给前端人员的接口说明等信息,且注释能够在Django REST Framework的页面中显示;数据库

class AllSchoolsView(APIView):
    """
    这是AllSchoolsView的返回结果
    """
    def get(self, request):
        schools = School.objects.all()
        schools_serializer = SchoolSerializer(schools, many=True)
        return Response(schools_serializer.data)

而后从新运行项目,而后刷新页面,咱们就能够获得如图的效果:
3.pngdjango

Django REST Framework的登陆

首先为了不在Django REST Framework 中登陆时报错'CSRFCheck' object has no attribute 'process_request',咱们须要将Django升级到1.11.6以上的版本:pip install django==1.11.6,记得是两个等号哟。而后用户就可使用以前建立的超级用户成功登陆了json

4.png

Restful API的方法

GET(SELECT):从服务器取出资源(一项或多项);segmentfault

POST(CREATE):在服务器新建一个资源;浏览器

PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源);服务器

PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性);app

DELETE(DELETE):从服务器删除资源;框架

HEAD:获取资源的元数据;

OPTIONS:获取信息,关于资源的哪些属性是客户端能够改变的;

实现POST接口

首先编辑serializer.py文件,将SchoolSerializer类中的字段与School表中的字段一一对应,保证数据库写入不会报错;

from rest_framework import serializers
from .models import School

class SchoolSerializer(serializers.Serializer):
    name = serializers.CharField()
    desc = serializers.CharField()
    location = serializers.CharField()
    create_time = serializers.DateTimeField(default=datetime.now,)
    course_numbers = serializers.IntegerField()
    def create(self, validated_data):
        """
        Create and return a new `Snippet` instance, given the validated data.
        """
        return School.objects.create(**validated_data)

而后编辑views.py文件,修改AllSchoolsView类,新增一个post提交方法,在代码中打上断点;

from rest_framework.views import APIView
from .serializer import SchoolSerializer
from rest_framework.response import Response
from rest_framework import status

class AllSchoolsView(APIView):
    """
    这是AllSchoolsView的返回结果
    """
    def get(self, request):
        schools = School.objects.all()
        schools_serializer = SchoolSerializer(schools, many=True)
        return Response(schools_serializer.data)

    def post(self, request):
        # 将request.data的数据进行校验
        # request.data会拿到post提交的字段
        serializer = SchoolSerializer(data=request.data)
        # 若是验证字段合法
        if serializer.is_valid():
            # 直接保存到数据库,这里会调用GoodsSerializer的create方法
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

而后可使用postman进行提交请求,先在Body中选择x-www-form-urlencoded的提交方式,而后填写好相应字段的值

5.png

而后发送send,在post方法中把获得的数据封装且进行序列化,返回到序列化对象serializer中,最后经过save方法保存到数据库中,而后咱们访问http://127.0.0.1:12345/school/all/,获得的数据是否是增长了一条新的记录呀

6.png

还能够直接在浏览器的页面中进行post请求,先选择提交格式,而后建立相应数据,直接点击POST,若是返回HTTP 201 Created,则数据已经被建立,写入了数据库中;

7.png
8.png
9.png

参考:https://www.9xkd.com/user/plan-view.html?id=4024758689