Flask-Restful插件

介紹:

Flask-Restful是一個專門用來寫restful api的一個插件荧嵌。使用他可以快速的集成restful api功能晒来。在app的后臺以及純api的后臺中印屁,這個插件可以幫助我們節(jié)省很多時間雨膨。當然幕垦,如果在普通的網(wǎng)站中岳遥,這個插件就顯得有些雞肋了奕翔,因為在普通的網(wǎng)頁開發(fā)中,是需要去渲染HTML代碼的浩蓉,而Flask-Restful在每個請求中都是返回json格式的數(shù)據(jù)派继。

安裝:

Flask-Restful需要在Flask 0.8以上的版本,在Python2.6或者Python3.3上運行捻艳。通過pip install flask-restful即可安裝驾窟。

定義Restful的視圖:

如果使用Flask-Restful,那么定義視圖函數(shù)的時候认轨,就要繼承自flask_restful.Resource類绅络,然后再根據(jù)當前請求的method來定義相應(yīng)的方法。比如期望客戶端是使用get方法發(fā)送過來的請求,那么就定義一個get方法恩急。類似于MethodView杉畜。示例代碼如下:

from flask import Flask,render_template,url_for

from flask_restful import ?Api,Resource

app = Flask(__name__)

# 用Api來綁定

appapi = Api(app)

class IndexView(Resource):

????defget(self):

????????return{"username":"zhiliao"}

api.add_resource(IndexView,'/',endpoint='index')

注意事項:

1、endpoint是用來給url_for反轉(zhuǎn)url的時候指定的衷恭。如果不寫endpoint此叠,那么將會使用視圖的名字的小寫來作為endpoint。

2随珠、dd_resource的第二個參數(shù)是訪問這個視圖函數(shù)的url灭袁,這個url可以跟之前的route一樣,可以傳遞參數(shù)窗看。并且還有一點不同的是茸歧,這個方法可以傳遞多個url來指定這個視圖函數(shù)。

參數(shù)解析:

Flask-Restful插件提供了類似WTForms來驗證提交的數(shù)據(jù)是否合法的包烤芦,叫做reqparse。以下是基本用法:

parser = reqparse.RequestParser()

parser.add_argument('username',type=str,help='請輸入用戶名')

args = parser.parse_args()

add_argument可以指定這個字段的名字析校,這個字段的數(shù)據(jù)類型等构罗。以下將對這個方法的一些參數(shù)做詳細講解:

default:默認值,如果這個參數(shù)沒有值智玻,那么將使用這個參數(shù)指定的值遂唧。

required:是否必須。默認為False吊奢,如果設(shè)置為True盖彭,那么這個參數(shù)就必須提交上來。

type:這個參數(shù)的數(shù)據(jù)類型页滚,如果指定召边,那么將使用指定的數(shù)據(jù)類型來強制轉(zhuǎn)換提交上來的值。

choices:選項裹驰。提交上來的值只有滿足這個選項中的值才符合驗證通過隧熙,否則驗證不通過。

help:錯誤信息幻林。如果驗證失敗后贞盯,將會使用這個參數(shù)指定的值作為錯誤信息。

trim:是否要去掉前后的空格沪饺。

其中的type躏敢,可以使用python自帶的一些數(shù)據(jù)類型,也可以使用flask_restful.inputs下的一些特定的數(shù)據(jù)類型來強制轉(zhuǎn)換整葡。比如一些常用的:

url:會判斷這個參數(shù)的值是否是一個url件余,如果不是,那么就會拋出異常。

regex:正則表達式蛾扇。

date:將這個字符串轉(zhuǎn)換為datetime.date數(shù)據(jù)類型攘烛。如果轉(zhuǎn)換不成功,則會拋出一個異常镀首。

輸出字段:

對于一個視圖函數(shù)坟漱,你可以指定好一些字段用于返回。以后可以使用ORM模型或者自定義的模型的時候更哄,他會自動的獲取模型中的相應(yīng)的字段芋齿,生成json數(shù)據(jù),然后再返回給客戶端成翩。這其中需要導(dǎo)入flask_restful.marshal_with裝飾器觅捆。并且需要寫一個字典,來指示需要返回的字段麻敌,以及該字段的數(shù)據(jù)類型栅炒。示例代碼如下:

class ProfileView(Resource):

????resource_fields = {'username': fields.String,'age': fields.Integer,'school': fields.String? ? }? ?

????@marshal_with(resource_fields)

????defget(self,user_id):

????????user = User.query.get(user_id)

????????return user

在get方法中,返回user的時候术羔,flask_restful會自動的讀取user模型上的username以及age還有school屬性赢赊。組裝成一個json格式的字符串返回給客戶端。

重命名屬性:

很多時候你面向公眾的字段名稱是不同于內(nèi)部的屬性名级历。使用 attribute可以配置這種映射释移。比如現(xiàn)在想要返回user.school中的值,但是在返回給外面的時候寥殖,想以education返回回去玩讳,那么可以這樣寫:

resource_fields = {

????'education': fields.String(attribute='school')

}

默認值:

在返回一些字段的時候,有時候可能沒有值嚼贡,那么這時候可以在指定fields的時候給定一個默認值熏纯,示例代碼如下:

resource_fields = {

????'age': fields.Integer(default=18)

}

復(fù)雜結(jié)構(gòu):

有時候想要在返回的數(shù)據(jù)格式中,形成比較復(fù)雜的結(jié)構(gòu)粤策。那么可以使用一些特殊的字段來實現(xiàn)豆巨。比如要在一個字段中放置一個列表,那么可以使用fields.List掐场,比如在一個字段下面又是一個字典往扔,那么可以使用fields.Nested。以下將講解下復(fù)雜結(jié)構(gòu)的用法:

class ProfileView(Resource):

resource_fields = {'username': fields.String,

????age': fields.Integer,

????'school': fields.String,

????'tags': fields.List(fields.String),

????'more': fields.Nested({

????????'signature': fields.String})? ?

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熊户,一起剝皮案震驚了整個濱河市萍膛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嚷堡,老刑警劉巖蝗罗,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異串塑,居然都是意外死亡沼琉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門打瘪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闺骚,“玉大人妆档,你說我怎么就攤上這事贾惦⌒氚澹” “怎么了贺嫂?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵第喳,是天一觀的道長。 經(jīng)常有香客問我踱稍,道長曲饱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任珠月,我火速辦了婚禮扩淀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啤挎。我一直安慰自己驻谆,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胜臊,像睡著了一般勺卢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上象对,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天黑忱,我揣著相機與錄音,去河邊找鬼织盼。 笑死杨何,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的沥邻。 我是一名探鬼主播危虱,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唐全!你這毒婦竟也來了埃跷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤邮利,失蹤者是張志新(化名)和其女友劉穎弥雹,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體延届,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡剪勿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了方庭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡械念,死狀恐怖头朱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情龄减,我是刑警寧澤项钮,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站希停,受9級特大地震影響烁巫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宠能,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一亚隙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棍潘,春花似錦恃鞋、人聲如沸崖媚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畅哑。三九已至,卻和暖如春水由,著一層夾襖步出監(jiān)牢的瞬間荠呐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工砂客, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泥张,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓鞠值,卻偏偏與公主長得像媚创,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子彤恶,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理钞钙,服務(wù)發(fā)現(xiàn),斷路器声离,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 22年12月更新:個人網(wǎng)站關(guān)停芒炼,如果仍舊對舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,181評論 22 257
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,396評論 1 92
  • 十二月還在默默開的 是故園點點的桂花 那縷淡淡的幽香 靜靜地彌漫在凌冽的風中 悄悄地吹到人的心坎上 我在電話中問父...
    當年明月sky閱讀 614評論 0 0
  • 雀躍的兒童歡呼放假术徊,心酸的大人凌晨三點還沒回家本刽。 “這個社會對年輕人很苛刻≡蹋” “每個人都活得不容易子寓。” “你見過...
    巨寶朋閱讀 267評論 0 0