6.drf中各類View

Rest中的View

(1)使用Drf中的Serializer

其他的包

1531818167128.png

其中django-guardian是用來寫api文檔的

序列化

之前我們已經(jīng)講了如何只使用Python對數(shù)據(jù)進(jìn)行序列化顯示狱窘,這次我們使用drf中的序列化工具

文檔地址:http://www.django-rest-framework.org/tutorial/1-serialization/

1.創(chuàng)建Serializer類(用來自定義對數(shù)據(jù)的序列化和反序列化操作)

1531819281706.png

首先在view.py同級目錄下創(chuàng)建一個Serializer.py文件围肥。

另外我們應(yīng)用了drf中的serializer內(nèi)容

其中我們只引用了model類中的一個字段name和id砰诵,其中read_only是必須要填寫的字段裕寨,其他的可以看文檔

地址:http://www.django-rest-framework.org/api-guide/fields/

create是創(chuàng)建數(shù)據(jù)時(shí)所需要的(已經(jīng)包裝好自帶)

update是修改數(shù)據(jù)時(shí)所需要的(已經(jīng)包裝好)

引用到View中

我們已經(jīng)寫好了Serializer文件撇他,接下來我們只需要在View中對其進(jìn)行數(shù)據(jù)操作就行了


1531819507545.png
1531819532816.png

問題

我們會發(fā)現(xiàn)當(dāng)我們寫serializer的時(shí)候肥印,他的代碼其實(shí)和django中的Form表單很相似(樣子上很像是)性锭,因此他也存在form的問題孵班,就是當(dāng)我們字段一旦過多涉兽,就會出現(xiàn)工作重復(fù)量多。在Form中使用了ModelForm簡化了這個操作篙程,因此在Serializer也可以使用ModelSerializer簡化這些操作

2.使用ModelSerializer

文檔

地址:http://www.django-rest-framework.org/tutorial/1-serialization/

變動

我們只需要將之前寫好的Serializer.py中的內(nèi)容修改成ModelSerializer就可以了

1531820075838.png

fields必須是兩個及兩個以上

fields = "____all____" 則表示所有字段

其實(shí)進(jìn)入源碼我們會發(fā)現(xiàn)枷畏,他已經(jīng)給我們定義好了create和update,因此他已經(jīng)可以實(shí)現(xiàn)簡單的創(chuàng)建和更新虱饿,當(dāng)然如果內(nèi)容復(fù)雜拥诡,我們可以重寫這兩個函數(shù)

1531838804182.png

嵌套

由于我們的category是一個外鍵,他之下還包含了更多的內(nèi)容

因此我們只需要重新寫一個serializer氮发,并且實(shí)例化category就可以了

1531839111364.png
1531839116988.png

(2)使用drf中的不同種類的view

關(guān)系

drf中存在多種多樣的View渴肉,且不同的View都存在繼承上一個View,但最終都繼承至django.view,generic中的View

他們只是繼承并添加了不同功能的mixin

1.APIview

文檔

地址:http://www.django-rest-framework.org/tutorial/3-class-based-views/

1.我們之前已經(jīng)寫過Serializer了爽冕,因此這里不再寫了

2.對View.py進(jìn)行操作

1531817557345.png

1)這是文檔中的一個案例仇祭,其中snippets是我們的一個model,這里引入Serializer和model

2)接下來引入ApiView(看源碼我們會發(fā)現(xiàn)APIView是繼承自View的)

3)引入rest_framework中的Response (不懂可以看文檔第二章http://www.django-rest-framework.org/tutorial/2-requests-and-responses/

同理扇售,我們對我們的項(xiàng)目也可以這么做

1531838004489.png

1531838017547.png

當(dāng)然前塔,如果我們需要向django項(xiàng)目一樣,在url地址中加入其他的內(nèi)容承冰,這些函數(shù)也可以傳入?yún)?shù)


1531838098705.png

1531838105960.png

之后會講到

(3)使用Mixins

Mixins在我看來相當(dāng)于一個混入的功能模塊,每一種Mixins都代表了一種功能或者一些功能

1531839970985.png

APIview

1531840027119.png

其實(shí)ListModelMixin種已經(jīng)封裝了一部分我們在APIview種的代碼

1531840108663.png

在GenericApiView里面封裝了獲取serializer名稱的方法

1531840350037.png

這里只是使用了get方法收集參數(shù)并進(jìn)行傳遞

注:如果不寫get食零,會出現(xiàn)錯誤困乒,因?yàn)樗麜J(rèn)你不接受get請求

(4)使用GengricView

其實(shí)在Generic中已經(jīng)幫我們定義好了相應(yīng)的方法,我們只需要調(diào)用就可以了

1531840638285.png
1531840644004.png

相同的贰谣,他還定義了

1531840659732.png
1531840668613.png

等等的內(nèi)容娜搂,就是他將mixins功能塊封裝了起來迁霎,我們只需要調(diào)用他的View內(nèi)容就可以了。

(5)使用ViewSet和路由器

文檔:

地址:http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers/

什么是ViewSet

谷歌翻譯將他翻譯成視圖集百宇,即一個通用的視圖集合

實(shí)踐

之前我們所用的generics.ListAPIView中


1531887002002.png

分別繼承了這兩個類(GenericAPIView 考廉,以及Mixins.ListModelMixin),這次我們使用ViewSet也需要這樣

首先我們先繼承viewsets.GenericViewSet

1531887091025.png

我們會發(fā)現(xiàn)

1531887111491.png

他給我們添加了一個新的Mixin功能携御,并且繼承了GenericAPIView 昌粤,但是并沒有繼承Mixins.ListModelMixin,因此我們還需要添加這個功能(這個功能是用來獲取list列表的)


1531887261480.png

再來說一說ViewSetMixin這個功能

1531887373472.png

他重寫了我們的as_view方法

他將采用字典的形式獲取參數(shù)(文檔中給出了例子)

因此我們將要修改urls.py中的寫法

1531887829822.png

當(dāng)然你也可以這樣寫

1531887880023.png

隱藏Mixins

1531888008374.png

其實(shí)他也封裝好了一些內(nèi)容來供我們使用

1531888030549.png

路由

我們之前再url中配置了內(nèi)容啄刹,但是頻繁的出現(xiàn)get list post create會出現(xiàn)工作量大的可能性涮坐,因此這里出現(xiàn)里路由器

1531888322037.png

我們只需要將我們的viewSet注冊到router中,再調(diào)用router.urls來匹配就可以了

1531888495515.png
1531888507018.png

總結(jié)

View誓军,ApiView袱讹,GengricView,GenericViewSet昵时,Router捷雕,Mixin

在Mixin中一共有5個分別是

CreateModelMixin(post,增)壹甥,

ListModelMixin(get救巷,查),

RetrieveModelMixin(get,附帶參數(shù))

UpdateModelMixin(put/patch,改)

DestroyModelMixin(delete,刪)

1531889929757.png

層級關(guān)系

View是屬于django的盹廷,

ApiView繼承自View(但他是屬于drf中的)

1531889625702.png
1531889632246.png

GengricApiView繼承自ApiView(屬于drf中的)

并且他是一個父類征绸,所有的增刪改查功能繼承這個父類之后,再繼承一個mixin功能

1531890147779.png

GenericViewSet繼承自GenericAPIView(屬于drf中的)俄占,并且添加了一個ViewSetMixin功能(重寫了view)

分別繼承了其他的功能后成為了新的viewset

1531890566393.png

多使用管怠,多練習(xí)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缸榄,隨后出現(xiàn)的幾起案子渤弛,更是在濱河造成了極大的恐慌,老刑警劉巖甚带,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件她肯,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹰贵,警方通過查閱死者的電腦和手機(jī)晴氨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碉输,“玉大人籽前,你說我怎么就攤上這事。” “怎么了枝哄?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵肄梨,是天一觀的道長。 經(jīng)常有香客問我挠锥,道長众羡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任蓖租,我火速辦了婚禮粱侣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘菜秦。我一直安慰自己甜害,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布球昨。 她就那樣靜靜地躺著尔店,像睡著了一般。 火紅的嫁衣襯著肌膚如雪主慰。 梳的紋絲不亂的頭發(fā)上嚣州,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音共螺,去河邊找鬼该肴。 笑死,一個胖子當(dāng)著我的面吹牛藐不,可吹牛的內(nèi)容都是我干的匀哄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼雏蛮,長吁一口氣:“原來是場噩夢啊……” “哼涎嚼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起挑秉,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤法梯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后犀概,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體立哑,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年姻灶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铛绰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡产喉,死狀恐怖至耻,靈堂內(nèi)的尸體忽然破棺而出若皱,到底是詐尸還是另有隱情镊叁,我是刑警寧澤尘颓,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站晦譬,受9級特大地震影響疤苹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜敛腌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一卧土、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧像樊,春花似錦尤莺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涂滴,卻和暖如春友酱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柔纵。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工缔杉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搁料。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓或详,卻偏偏與公主長得像,于是被迫代替她去往敵國和親郭计。 傳聞我的和親對象是個殘疾皇子霸琴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 你好 Django REST Framework 在第二章,我們學(xué)習(xí)了 REST 開發(fā)的基本知識拣宏,并且在沒有借助任...
    ucag閱讀 4,523評論 5 16
  • 版權(quán): https://github.com/haiiiiiyun/awesome-django-cn Aweso...
    若與閱讀 23,034評論 3 241
  • Django: csrf防御機(jī)制 csrf攻擊過程 1.用戶C打開瀏覽器沈贝,訪問受信任網(wǎng)站A,輸入用戶名和密碼請求登...
    lijun_m閱讀 1,053評論 0 0
  • 一勋乾、基本視圖類 (APIView/@api_view) 1宋下、類基礎(chǔ)視圖(APIView) DRF不同于django...
    入間閱讀 3,672評論 0 3
  • 2017.1.7日,我從男朋友口中得知了他爸爸肝癌晚期的事辑莫。 異地戀学歧,那天我們打電話了,他哭得像個孩子各吨。 7...
    土檸萌閱讀 146評論 0 0