昨日教授大家如何初始化flask-restful以及建立第一個Resource
,到目前flask-restful的基本知識以經教授一半了,今天在繼續教授其他基本知識。
本文章同步放置於此
首先定義一個User這個Resource的基本結構,內容如下列例子:
from flask_restful import Resource
class User (Resource):
def get(self, name):
pass
def post(self, name):
pass
def put(self, name):
pass
def delete(self, name):
pass
讀者們可以把這內容複製貼上一個放在resource資料夾內的user.py
,這邊先說明一下pass
如同其字面上的意思就是不做任何事情,我們僅是先把框架定義好而已。
昨日的教程已有教授如何註冊Resource,不過如何將name由url帶入方法內呢?所以接下來更進一步教授如何綁定url上的變數,請大家先看看以下例子:
from flask import Flask
from flask_restful import Api
from resources.user import User
app = Flask(__name__)
api = Api(app)
api.add_resource(User, "/user/<string:name>")
if __name__ == "__main__":
app.run()
如此可以把User
綁定到url/user/
上面去,而最後一個內容會轉型成字串傳遞給方法當作是name
的變數。
完成Resource以及綁定User後,接下來有兩個選擇,繼續實作其內容,或是先把POSTMAN設定好,在此筆者頃向先設置POSTMAN再來一一完成user的method。
由於url上需要提交name
,這裡為了方便我們也把name
加到環境變數並設定好對應的四個方法的請求資料,相信經過昨日的教程應該難不倒讀者,若是有困難的讀者在複習一下:
首先先點擊眼睛
看到環境變數的視窗,在按下EDIT
的按鈕開始修改,最後加入name
即可,完成結果如下圖顯示:
接下來設定四個請求的url如下列四圖所示:
這時可以按下SEND
,相信響應應該沒有任何東西,如果有錯誤內容請回覆告知喔,因為你遇到問題了。接下來就開始實作以下內容了。
相信教經過昨日的教程各位讀者已經可以獨自完成get
這方法,不過還不熟的讀者可以參考我的方法實作,在此筆者先用一個list來存放使用者資料,但是重新啟動伺服器後所有資料就不存在,不過沒關係,目前先專注在api開發,30日教程內筆者會帶大家如何搭配資料庫,所以先以下列方式來實作:
from flask_restful import Resource
users = []
class User (Resource):
def get(self, name):
find = [item for item in users if item['name'] == name]
if len(find) == 0:
return {
'message': 'username not exist!'
}, 403
user = find[0]
if not user:
return {
'message': 'username not exist!'
}, 403
return {
'message': '',
'user': user
}
def post(self, name):
pass
def put(self, name):
pass
def delete(self, name):
pass
透過list comprehension找到name相同的資料並且返回該筆資料,待之後介紹與db介接之時再調整此程序。就這樣Resource的get部分實作完成了。
使用後相信大家應該都找不到對應name
的資料,雖然應用程序沒有故障,但是大家收到的響應應該如下圖所示:
這時先設定些初始資料來驗證get
方法,此時我們再將上述user.py
加以調整如下:
from flask_restful import Resource
users = [{
'name': 'kirai',
}]
class User (Resource):
def get(self, name):
find = [item for item in users if item['name'] == name]
if len(find) == 0:
return {
'message': 'username not exist!'
}, 403
user = find[0]
if not user:
return {
'message': 'username not exist!'
}, 403
return {
'message': '',
'user': user
}
def post(self, name):
pass
def put(self, name):
pass
def delete(self, name):
pass
如此應該可以找到一筆資料,所以在請求一次應該能看到以下響應:
相信實作完get後很多讀者已經知道如何實作delete,如果還沒想法的讀者也別難過繼續看下列例子,想想自己哪裡還不熟的。
from flask_restful import Resource
users = [{
'name': 'kirai',
}]
class User (Resource):
def get(self, name):
find = [item for item in users if item['name'] == name]
if len(find) == 0:
return {
'message': 'username not exist!'
}, 403
user = find[0]
if not user:
return {
'message': 'username not exist!'
}, 403
return {
'message': '',
'user': user
}
def post(self, name):
pass
def put(self, name):
pass
def delete(self, name):
global users
users = [item for item in users if item['name'] != name]
return {
'message': 'Delete done!'
}
處理完成後就準備POSTMAN伺候了,首先選定目標url如下圖:
相信提交請求之後會收到下列響應:
但是真的刪除了嗎?這時再提交一次GET的請求,並確認響應如下:
這裡我們可以真的確定該user已經被刪除了。
今日完成CRUD的R及D明日繼續C跟U,在處理C跟U時會介紹如何處理請求傳輸的參數以及POSTMAN如何傳遞參數,敬請期待。
api.add_resource(User, "/user/<string: name>")
<string: name>
不能有空白的樣子
api.add_resource(User, "/user/<string:name>")
感謝指正