這篇文章主要介紹如何使用ModelSerializer和Mixin,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
專業(yè)從事成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,高端網(wǎng)站制作設(shè)計(jì),微信小程序開發(fā),網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團(tuán)隊(duì)竭力真誠服務(wù),采用html5+CSS3前端渲染技術(shù),成都響應(yīng)式網(wǎng)站建設(shè)公司,讓網(wǎng)站在手機(jī)、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項(xiàng)小組,與您實(shí)時(shí)在線互動,隨時(shí)提供解決方案,暢聊想法和感受。之前我們學(xué)了serializers模塊中Serializer類的使用,現(xiàn)在我們來學(xué)習(xí)一下如何使用Django中的serializers.ModelSerializer類替換之前的serializers.Serializer類
上一章我們是在Schools APP中的serializer.py中編寫的代碼吧,我們先看一下之前的代碼
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)
我們定義了一個(gè)SchoolSerializer類,繼承了serializers.Serializer類,然后在其中定義了5個(gè)字段對吧,那我們來看一下如何把serializers.Serializer類替換成serializers.ModelSerializer類吧
class SchoolSerializer(serializers.ModelSerializer): class Meta: # 指定需要序列化的Model model = School # 指定需要序列化的Model中的字段 fields = ('name', 'desc') # 序列化所有的字段 fields = '__all__' def create(self, validated_data): """ Create and return a new `Snippet` instance, given the validated data. """ return School.objects.create(**validated_data)
看上面代碼可以看出,可以使用fields指定需要序列化的Model中的字段,可以指定一個(gè)、兩個(gè)..或者所有字段,如果我們要指定序列化所有字段我們可以使用fields = '__all__'
我們先來看一下如果序列化兩個(gè)字段是什么樣子fields = ('name', 'desc')
:
再來試一下序列化所有字段是什么樣子:fields = '__all__'
通過代碼我們可以得出結(jié)論,也就是使用serializers.ModelSerializer類
代替serializers.Serializer類
,也就是讓schools app中SchoolSerializer類繼承serializers.ModelSerializer類,能夠讓代碼更加簡潔,也更加方便;
mixins可以實(shí)現(xiàn)類功能或者函數(shù)功能增強(qiáng),能夠動態(tài)的增加函數(shù)的一些屬性和方法,DRF庫中有很多功能增強(qiáng)的mixin,
ListModelMixin:列表視圖擴(kuò)展類,提供list(request, args, *kwargs)方法快速實(shí)現(xiàn)列表視圖,返回200狀態(tài)碼,該Mixin的list方法會對數(shù)據(jù)進(jìn)行過濾和分頁;
GenericAPIView:繼承自APIVIew,增加了對于列表視圖和詳情視圖可能用到的通用支持方法,queryset為列表視圖的查詢集,serializer_class為視圖使用的序列化器;
那現(xiàn)在我們編輯APP中的views.py文件, 重寫AllSchoolsView類
class AllSchoolsView(mixins.ListModelMixin,generics.GenericAPIView ): """ 這是AllSchoolsView的返回結(jié)果 """ # queryset、serializer_class是固定的 queryset = School.objects.all() serializer_class = SchoolSerializer def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs)
訪問接口的效果和之前是一眼的,但是代碼卻比未修改之前要少,我們來看一下
我們通過查看ListAPIView的繼承關(guān)系能夠看到ListAPIView繼承mixins.ListModelMixin和GenericAPIView:
class ListAPIView(mixins.ListModelMixin, GenericAPIView):
修改一下AllSchoolsView的繼承關(guān)系,我們發(fā)現(xiàn)如果讓AllSchoolsView繼承g(shù)enerics.ListAPIView,訪問接口的效果和之前也是一樣的,甚至可以省略get方法,
因?yàn)長istAPIView類自帶一個(gè)get方法,如此可以更加的簡潔代碼了。就不放效果圖了,和上面的圖一樣;
class AllSchoolsView(generics.ListAPIView): """ 這是AllSchoolsView的返回結(jié)果 """ # queryset、serializer_class是固定的 queryset = School.objects.all() serializer_class = SchoolSerializer # def get(self, request, *args, **kwargs): # return self.list(request, *args, **kwargs)
在rest_framework庫下的generics.py中有很多封裝好的View
這里的規(guī)律是Create表示添加,Retrieve表示操作一條數(shù)據(jù),List表示操作多條數(shù)據(jù),Destroy表示刪除,Update表示更新。
ListCreateAPIView:用于post提交之后添加多條數(shù)據(jù)
RetrieveAPIView:用于返回一條數(shù)據(jù)
ListAPIView:用于返回一個(gè)表的數(shù)據(jù),或多條數(shù)據(jù)
CreateAPIView:添加一條數(shù)據(jù)
以上是“如何使用ModelSerializer和Mixin”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!
網(wǎng)站題目:如何使用ModelSerializer和Mixin-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://bm7419.com/article36/ijgsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站策劃、做網(wǎng)站、App開發(fā)、標(biāo)簽優(yōu)化、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容