溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Serializer和ModelSerializer如何使用

發(fā)布時(shí)間:2021-11-30 17:18:01 來源:億速云 閱讀:130 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“Serializer和ModelSerializer如何使用”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Serializer和ModelSerializer如何使用”這篇文章吧。

Django REST Framework API返回結(jié)果解析

學(xué)習(xí)了之前的文章我們知道如何使用Django REST framework框架設(shè)計(jì)API,我還使用Schools APP設(shè)計(jì)了一個(gè)API

Serializer和ModelSerializer如何使用

除此之外,我們還可以查看API的OPTIONS,然后可以得很多信息,比如說第一行請(qǐng)求行’HTTP 200 OK’,表示請(qǐng)求成功,第二行Allow表示允許的請(qǐng)求方式,Content-Type:application/json表示發(fā)送端發(fā)送的實(shí)體數(shù)據(jù)的數(shù)據(jù)類型。
還有下面的json數(shù)據(jù),name表示接口名字、description詳細(xì)描述、renders表示可解析的形式,parses是服務(wù)器端可解析的三種方式

Serializer和ModelSerializer如何使用

我們還可以在app的views.py的類中可以給API添加注釋,如比給前端人員的接口說明等信息,且注釋可以在Django REST Framework的頁面中顯示;

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

然后重新運(yùn)行項(xiàng)目,然后刷新頁面,我們就可以得到如圖的效果:

Serializer和ModelSerializer如何使用

Django REST Framework的登錄

首先為了避免在Django REST Framework 中登錄時(shí)報(bào)錯(cuò)'CSRFCheck' object has no attribute 'process_request',我們需要將Django升級(jí)到1.11.6以上的版本:pip install django==1.11.6,記得是兩個(gè)等號(hào)喲。然后用戶就可以使用之前創(chuàng)建的超級(jí)用戶成功登錄了

Serializer和ModelSerializer如何使用

Restful API的方法

GET(SELECT):從服務(wù)器取出資源(一項(xiàng)或多項(xiàng));

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

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

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

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

HEAD:獲取資源的元數(shù)據(jù);

OPTIONS:獲取信息,關(guān)于資源的哪些屬性是客戶端可以改變的;

實(shí)現(xiàn)POST接口

首先編輯serializer.py文件,將SchoolSerializer類中的字段與School表中的字段一一對(duì)應(yīng),保證數(shù)據(jù)庫寫入不會(huì)報(bào)錯(cuò);

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類,新增一個(gè)post提交方法,在代碼中打上斷點(diǎn);

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的返回結(jié)果
    """
    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的數(shù)據(jù)進(jìn)行校驗(yàn)
        # request.data會(huì)拿到post提交的字段
        serializer = SchoolSerializer(data=request.data)
        # 如果驗(yàn)證字段合法
        if serializer.is_valid():
            # 直接保存到數(shù)據(jù)庫,這里會(huì)調(diào)用GoodsSerializer的create方法
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

然后可以使用postman進(jìn)行提交請(qǐng)求,先在Body中選擇x-www-form-urlencoded的提交方式,然后填寫好相應(yīng)字段的值

Serializer和ModelSerializer如何使用

然后發(fā)送send,在post方法中把得到的數(shù)據(jù)封裝且進(jìn)行序列化,返回到序列化對(duì)象serializer中,最后通過save方法保存到數(shù)據(jù)庫中,然后我們?cè)L問http://127.0.0.1:12345/school/all/,得到的數(shù)據(jù)是不是增加了一條新的記錄呀

Serializer和ModelSerializer如何使用

還可以直接在瀏覽器的頁面中進(jìn)行post請(qǐng)求,先選擇提交格式,然后創(chuàng)建相應(yīng)數(shù)據(jù),直接點(diǎn)擊POST,如果返回HTTP 201 Created,則數(shù)據(jù)已經(jīng)被創(chuàng)建,寫入了數(shù)據(jù)庫中;

Serializer和ModelSerializer如何使用

Serializer和ModelSerializer如何使用

Serializer和ModelSerializer如何使用

以上是“Serializer和ModelSerializer如何使用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI