flask restful 入門級學習
1.安裝
pip install flask
pip install flask-restful
2.書寫規範
-
資料傳輸格式
都是json格式
-
請求方式
-
GET 獲取全部的資源
-
GET 獲取某個特定資源
-
POST 建立新資源
-
PUT 更新特定資源
-
DELETE 刪除特定資源
-
-
狀態碼
-
GET檢索資源列表,返回一個資源陣列或字典,並返回狀態碼200,表示請求成功。
-
GET檢索某個特定資源,返回單個資源,並返回狀態碼200,表示請求成功。
-
POST建立新資源,返回建立後的資源,並返回狀態碼201,表示資源建立成功。
-
PUT更新資源,返回更新後的資源,並返回狀態碼201,表示資源更新成功。
-
DELETE刪除資源,返回空,並返回狀態碼204,表示資源刪除成功,伺服器已無該資源
-
3.Flask-Restful外掛
Flask-Restful
是一個專門用來寫restful api
的一個外掛。使用他可以快速的整合restful api
功能。在app
的後臺以及純api
的後臺中,這個外掛可以幫助我們節省很多時間。當然,如果在普通的網站中,這個外掛就顯得有些雞肋了,因為在普通的網頁開發中,是需要去渲染HTML程式碼的,而Flask-Restful
在每個請求中都是返回json
格式的資料。
-
基本使用:
1.從flask_restful中匯入Api,來建立一個api物件。 2.寫一個檢視函式,讓他繼承自Resource,然後在這個裡面,使用你想要的請求方式來定義相應的方法,比如你 想要將這個檢視只能採用post請求,那麼就定義一個post方法。 3.使用api.add_resource新增檢視與url。
class LoginView(Resource):
def post(self,username=None):
return {"username":"zhang"}
api.add_resource(LoginView,'/login/<username>/','/regist/')#對映到url
如果使用Flask-Restful
,那麼定義檢視函式的時候,就要繼承自flask_restful.Resource
類,然後再根據當前請求的method
來定義相應的方法。比如期望客戶端是使用get
方法傳送過來的請求,那麼就定義一個get
方法。類似於MethodView
。
from flask import Flask,render_template,url_for
from flask_restful import Api,Resource
app = Flask(__name__)
# 用Api來繫結app
api = Api(app)
class IndexView(Resource):
def get(self):
return {"username":"zhiliao"}
api.add_resource(IndexView,'/',endpoint='index')
注意事項:
-
endpoint
是用來給url_for
反轉url
的時候指定的。如果不寫endpoint
,那麼將會使用檢視的名字的小寫來作為endpoint
。 -
add_resource
的第二個引數是訪問這個檢視函式的url
,這個url
可以跟之前的route
一樣,可以傳遞引數。並且還有一點不同的是,這個方法可以傳遞多個url
來指定這個檢視函式。 -
如果你想返回json資料,那麼就使用
flask_restful
,如果你是想渲染模版,那麼還是採用之前的方式,就是app.route
的方式。
4.引數解析
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
下的一些特定的資料型別來強制轉換。比如一些常用的:
-
url
:會判斷這個引數的值是否是一個url
,如果不是,那麼就會丟擲異常。 -
regex
:正則表示式。 -
date
:將這個字串轉換為datetime.date
資料型別。如果轉換不成功,則會丟擲一個異常。
-
Flask-restful
注意事項:
在藍圖中,如果使用flask-restful
,那麼在建立Api
物件的時候,就不要再使用app
了,而是使用藍圖。 如果在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')