flask restful學習筆記

2021-08-31 03:35:46 字數 4077 閱讀 2265

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...