1. 程式人生 > 實用技巧 >flask restful 入門級學習

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')

注意事項:

  1. endpoint是用來給url_for反轉url的時候指定的。如果不寫endpoint,那麼將會使用檢視的名字的小寫來作為endpoint

  2. add_resource的第二個引數是訪問這個檢視函式的url,這個url可以跟之前的route一樣,可以傳遞引數。並且還有一點不同的是,這個方法可以傳遞多個url來指定這個檢視函式。

  3. 如果你想返回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可以指定這個欄位的名字,這個欄位的資料型別等。以下將對這個方法的一些引數做詳細講解:

  1. default:預設值,如果這個引數沒有值,那麼將使用這個引數指定的值。

  2. required:是否必須。預設為False,如果設定為True,那麼這個引數就必須提交上來。

  3. type:這個引數的資料型別,如果指定,那麼將使用指定的資料型別來強制轉換提交上來的值。

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

  5. help:錯誤資訊。如果驗證失敗後,將會使用這個引數指定的值作為錯誤資訊。

  6. trim:是否要去掉前後的空格。

其中的type,可以使用python自帶的一些資料型別,也可以使用flask_restful.inputs下的一些特定的資料型別來強制轉換。比如一些常用的:

  1. url:會判斷這個引數的值是否是一個url,如果不是,那麼就會丟擲異常。

  2. regex:正則表示式。

  3. 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')