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)

而後從新運行項目,而後刷新頁面,咱們就能夠獲得如圖的效果:django

3.png

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):從服務器取出資源(一項或多項);瀏覽器

POST(CREATE):在服務器新建一個資源;服務器

PUT(UPDATE):在服務器更新資源(客戶端提供改變後的完整資源);app

PATCH(UPDATE):在服務器更新資源(客戶端提供改變的屬性);框架

DELETE(DELETE):從服務器刪除資源;post

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

相關文章
相關標籤/搜索