日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:flask中模型類數(shù)據(jù)如何序列化

我們在做后臺接口的時候,對于返回值,用的最多的就是json數(shù)據(jù)格式。

(視頻教程推薦:Flask視頻教程)

flask中,返回json數(shù)據(jù)格式,我們可以用到flask的jsonify函數(shù)。

對于基礎序列是可以直接序列化的,但是更多的情況下,我們要返回給前端的是一個從數(shù)據(jù)庫查詢的模型對象。那么要如何序列化一個模型對象呢?

追蹤flask源碼,我們會發(fā)現(xiàn),在處理特殊類型的數(shù)據(jù)的時候,flask用到了json包下的一個JSONEncoder類,它里面有一個很重要的函數(shù),default(),這里面對datetime,date,uuid,html等都做了特殊處理,但是沒有對模型對象做處理。

所以思路就出來了,我們需要重寫JSONEncoder的default函數(shù),想辦法將模型對象轉化為dict類型,這樣jsonify就可以直接處理了。

那么如何處理模型對象?

最開始想到的是,是用模型對象的__dict__屬性,但是這個屬性中只有實例屬性,沒有類屬性,所以顯然用這個不可取的。

又想到我們平時要定義一個字典類型,是怎么處理的?

可以使用d = dict() 函數(shù)來創(chuàng)建一個字典類型的變量。

那如果我們將模型對象實例作為參數(shù)傳遞給dict() 是否可行呢?

答案是可行的,但是我們需要在模型對象中定義兩個方法,keys()方法和__getitem__()方法

keys()方法返回值為一個序列,用于告訴dict,當前dict()的key值

__getitem__() 方法,用于將key值和value值對應起來返回給dict()

所以,flask中,如何序列化模型對象呢?答案就呼之欲出了。直接上代碼

如上圖,定義類JsonEncode,繼承自flask.json下面的JSONEncoder,然后重寫里面的default函數(shù),其他的不變,唯一就是增加模型對象的序列化,

判斷如果當前對象中存在keys和__getitem__屬性(即我們上面自定義的兩個方法),則表示是模型對象,把它作為參數(shù)傳給dict(),

然后將我們頂一個JsonEncoder函數(shù)替換掉flask.json下面的JSONEncoder類。

最后在需要序列化的模型下面定義keys()和__getitem__()方法。

相關教程推薦:python web教程


網(wǎng)站名稱:創(chuàng)新互聯(lián)Python教程:flask中模型類數(shù)據(jù)如何序列化
本文URL:http://m.5511xx.com/article/cdhjpig.html