restful api前端與後台進行通訊的一套規範,使用這套規範可以讓前後端開發變得更加輕鬆
協議
http 或 https
資料傳輸格式:json
url連線
get:獲取
post:新建(eg:使用者註冊)
put:更新(eg:要求客戶端提供所有資料)
patch:更新區域性
delete:從伺服器上刪除資源
狀態碼:
狀態碼原生描述
描述200
ok伺服器響應客戶請求
400invalid request
使用者請求有錯誤,伺服器沒有進行新建或自該資料的操作
401unauthorized
使用者沒有許可權訪問這個請求
403forbidden
因為某些原因禁止訪問這個請求
404not found
使用者傳送請求的url不存在
406not acceptable
使用者請求不被伺服器接收(例如伺服器需要某字段但客戶端沒有傳送)
500internal server error
伺服器內部錯誤,比如出現了乙個bug
從flask_restful
中匯入api
,來建立乙個api
物件。
寫乙個檢視函式,讓他繼承自resource
,然後在這個裡面,使用你想要的請求方式來定義相應的方法,比如你想要將這個檢視只能採用post
請求,那麼就定義乙個post
方法。
使用api.add_resource
新增檢視與url
。
示例**如下:
class
loginview
(resource)
:def
post
(self,username=
none):
return
api.add_resource(loginview,
'/login//'
,'/regist/'
)#對映到url
注意事項:
url還是跟之前的一樣,可以傳遞引數。也跟之前的不一樣,可以指定多個url。
endpoint是用來給url_for反轉url的時候指定的。如果不寫endpoint,那麼將會使用檢視的名字的小寫來作為endpoint。
flask-restful外掛程式提供了類似wtforms來驗證提交的資料是否合法的包,叫做reqparse。以下是基本用法:
parser = reqparse.requestparser(
) parser.add_argument(
'username'
,type
=str
,help
='請輸入使用者名稱'
) args = parser.parse_args(
)
add_argument可以指定這個欄位的名字,這個欄位的資料型別等。以下將對這個方法的一些引數做詳細講解:
default:預設值,如果這個引數沒有值,那麼將使用這個引數指定的值。
required:是否必須。預設為false,如果設定為true,那麼這個引數就必須提交上來。
type:這個引數的資料型別,如果指定,那麼將使用指定的資料型別來強制轉換提交上來的值。
choices:選項。提交上來的值只有滿足這個選項中的值才符合驗證通過,否則驗證不通過。
help:錯誤資訊。如果驗證失敗後,將會使用這個引數指定的值作為錯誤資訊。
trim:是否要去掉前後的空格。
其中的type,可以使用python自帶的一些資料型別,也可以使用flask_restful.inputs下的一些特定的資料型別來強制轉換。比如一些常用的:
7. url:會判斷這個引數的值是否是乙個url,如果不是,那麼就會丟擲異常。
8. regex:正規表示式。
9. date:將這個字串轉換為datetime.date資料型別。如果轉換不成功,則會丟擲乙個異常。
對於乙個檢視函式,你可以指定好一些字段用於返回。以後可以使用orm模型或者自定義的模型的時候,他會自動的獲取模型中的相應的字段,生成json資料,然後再返回給客戶端。這其中需要匯入flask_restful.marshal_with裝飾器。並且需要寫乙個字典,來指示需要返回的字段,以及該字段的資料型別。示例**如下:
class
profileview
(resource)
: resource_fields =
@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格式的字串返回給客戶端。
很多時候你面向公眾的欄位名稱是不同於內部的屬性名。使用 attribute可以配置這種對映。比如現在想要返回user.school中的值,但是在返回給外面的時候,想以education返回回去,那麼可以這樣寫:
resource_fields =
在返回一些欄位的時候,有時候可能沒有值,那麼這時候可以在指定fields的時候給定乙個預設值,示例**如下:
resource_fields =
有時候想要在返回的資料格式中,形成比較複雜的結構。那麼可以使用一些特殊的字段來實現。比如要在乙個欄位中放置乙個列表,那麼可以使用fields.list,比如在乙個字段下面又是乙個字典,那麼可以使用fields.nested。以下將講解下複雜結構的用法:
class
articleview
(resource)
: resource_fields =),
'tags'
: fields.list(fields.nested())
,'read_count'
: fields.integer(default=80)
} @marshal_with(resource_fields)
defget
(self,article_id)
: article = article.query.get(article_id)
return article
如果在flask-restful
的檢視中想要返回html
**,或者是模版,那麼就應該使用api.representation
這個裝飾器來定義乙個函式,在這個函式中,應該對html
**進行乙個封裝,再返回。示例**如下:
@api.representation(
'text/html'
)def
output_html
(data,code,headers)
:print
(data)
# 在representation裝飾的函式中,必須返回乙個response物件
resp = make_response(data)
return resp
class
listview
(resource)
:def
get(self)
:return render_template(
'index.html'
)api.add_resource(listview,
'/list/'
,endpoint=
'list'
)
flask restful 入門級學習
1.安裝 pip install flask pip install flask restful 2.書寫規範 狀態碼3.flask restful外掛程式 flask restful是乙個專門用來寫restful api的乙個外掛程式。使用他可以快速的整合restful api的後台以及純api的...
flask restful使用講解
flask restful筆記 安裝 flask restful需要在flask 0.8以上的版本,在python2.6或者python3.3上執行。通過pip install flask restful即可安裝。基本使用 1.從 flask restful 中匯入 api 來建立乙個 api 物件...
Flask RESTful關於請求
flask restful 提供了requestparser類,用來幫助我們檢驗和轉換請求資料。from flask restful import reqparse parser reqparse.requestparser parser.add argument rate type int hel...