據(jù)庫并序列化_python restful api 學(xué)習(xí)筆記.3 序列化)
創(chuàng)建一個(gè)應(yīng)用程序用于創(chuàng)建簡單的Web API。.py我們會當(dāng)下先去打造出一個(gè)專門被用來存放代碼片段的簡易模型, 接著持續(xù)進(jìn)行并著手去編輯/.py文件。模型創(chuàng)建初始遷移并首次同步數(shù)據(jù)庫。頭一件要做的關(guān)乎使用Web API的事, 是給出一種能把代碼片實(shí)例予以序列化, 以及反序列化為像是json這般表示形式的辦法。我們借助聲明跟表單極其相仿的序列化程序去達(dá)成此點(diǎn)。在名為的那個(gè)目錄里創(chuàng)建一份文件.py, 繼而增添如下內(nèi)容。序列化程序類當(dāng)中的第一部分, 對獲得序列化以及反序列化的字段作出了定義。而該()以及()方法, 針對實(shí)例在創(chuàng)建或者修改達(dá)到完全成熟狀態(tài)時(shí)調(diào)用.save() , 進(jìn)行了定義。序列化器類跟Form類極為相像, 于各自字段里含有相似的驗(yàn)證標(biāo)志, 比如說, 就像這樣, 還有別的例子, 是這樣的。在某些情形應(yīng)當(dāng)怎樣去顯示序列化程序, 字段標(biāo)志能夠?qū)Υ耸┯杩刂? 比如說在呈現(xiàn)為HTML的時(shí)候。 : .html}上述這種標(biāo)志等同于, 是施展于Form類之上。對于控制可瀏覽的API將怎樣去顯示而言, 這極具效用, 就如同我們在后續(xù)教程當(dāng)中將會目睹的那般。我們事實(shí)上也能夠借助使用該類省下一些時(shí)間, 我們隨后會瞧見, 不過此刻我們會讓我們的序列化器定義維持清晰。我們會在繼續(xù)往前之前, 熟悉運(yùn)用我們的新類, 接著進(jìn)入 shell。.py shell這個(gè)時(shí)候, 我們已然把模型實(shí)例轉(zhuǎn)變?yōu)楫?dāng)?shù)氐臄?shù)據(jù)類型, 為了達(dá)成序列化的進(jìn)程, 我們把數(shù)據(jù)呈現(xiàn)到j(luò)son里。反序列化是相似的。首先我們將一個(gè)流解析為本地?cái)?shù)據(jù)類型......然后我們將這些本地?cái)?shù)據(jù)類型恢復(fù)為完全填充的對象實(shí)例。留意API跟表單的工作模式相仿, 在我們著手編寫運(yùn)用我們序列化器的視圖之際, 那種相仿性理應(yīng)會變得愈發(fā)顯著。我們能夠序列化查詢集, 而非模型實(shí)例, 這也是可行的哦。要達(dá)成此項(xiàng)的話, 我們僅僅需要在序列化參數(shù)里添加一個(gè)標(biāo)志, 也就是manyTrue , 如此這般。大量信息被含在我們班正在復(fù)制的模型之中。要是我們能夠讓我們的代碼維持得更簡潔那么一丁點(diǎn)兒, 這般的情況將會是相當(dāng)不錯(cuò)的。就像提供Form類和類一樣REST框架包含類和類。咱們來瞧瞧運(yùn)用該類去重新構(gòu)建我們的序列化程式, /.py再度將此文件打開, 并且拿下列內(nèi)容把該類給替換掉。class (.):class Meta:model 序列化程序具有的那一個(gè)挺好的屬性在于, 您能夠借由打印其表述來核查序列化程序?qū)嵗?dāng)中的全部字段。開啟 shell.py shell, 而后嘗試開展如下操作:關(guān)鍵在于得記著, 類不會去做任何格外神奇之事項(xiàng), 它們僅僅是造就序列化程序類的便捷途徑:自動確定的一組字段。簡單的默認(rèn)實(shí)現(xiàn)()和()方法。瞧一瞧, 瞅一瞅, 看看咱們要怎樣運(yùn)用咱們那個(gè)新類去編寫一些API視圖。當(dāng)下這會兒呢, 咱們不會用上REST框架的任何別的功能, 咱們僅僅會把視圖編寫成常規(guī)的那種視圖的模樣的。編輯該/views.py文件并添加以下內(nèi)容。from .http ,from .views..csrffrom .from .from .from .作為一種支撐, 能夠列出所有現(xiàn)存片段, 或者創(chuàng)建全新片段的視圖, 將會成為我們API的根源。def ():List all code , or a new .if . GET: ..all() (, manyTrue)(.data, safeFalse)elif . POST:data ().parse() (datadata)if .():.save()(.data, 201)(., 400)假設(shè)我們期望能夠以不帶有CSRF令牌的客戶端朝著這個(gè)視圖發(fā)送POST請求, 此時(shí)我們就得把該視圖標(biāo)記成。這可不是你平常會想要去做的事兒啊, 而且REST框架視圖實(shí)際上采用的行為比這更理性, 然而它當(dāng)下能夠被運(yùn)用來達(dá)成我們的目的。我們還需要一個(gè)視圖, 其和單個(gè)片段相對應(yīng), 并且這個(gè)視圖能夠被用來進(jìn)行代碼段的檢索, 代碼段的更新, 以及代碼段的刪除。def (, pk):, or a code .try: ..get(pkpk).:(404)if . GET: ()(.data)elif . PUT:data ().parse() (, datadata)if .():.save()(.data)(., 400)elif . :.()(204)最后我們需要把這些觀點(diǎn)聯(lián)系起來。創(chuàng)建/urls.py文件咱們還得于 /urls.py 文件里進(jìn)行連接根, 以此來涵蓋我們代碼段應(yīng)用的 URL。啟動的開發(fā)服務(wù)器在另一個(gè)終端窗口中我們可以測試服務(wù)器。在對API進(jìn)行測試這件事上, 我們能夠采用curl, 也能夠?qū)⑵渥鳛轵?yàn)證手段, 它是以編寫的形式成為對用戶友好的http客戶端, 那就讓我們把它安裝起來。您可以使用pip安裝可以通過引用其ID來獲取特定片段