W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
Web API 的工作通常與 HTTP 動詞緊密相關,所以這使得實現(xiàn)這樣一個基于 MethodView 類的 API 很有意義。也就是說,你會注意到 大多數時候, API 需要不同的 URL 規(guī)則來訪問相同的方法視圖。譬如,想象一種 情況,你在 web 上暴露一個用戶對象:
URL | HTTP 方法 | 描述 |
/users/ | GET | 獲得全部用戶的列表 |
/users/ | POST | 創(chuàng)建一個新用戶 |
/users/<id> | GET | 顯示某個用戶 |
/users/<id> | PUT | 更新某個用戶 |
/users/<id> | DELETE | 刪除某個用戶 |
那么,你會想用 MethodView 做什么?訣竅是利用你可以 對相同的視圖提供多個規(guī)則的事實。
讓我們假設這時視圖看起來是這個樣子:
class UserAPI(MethodView):
def get(self, user_id):
if user_id is None:
# return a list of users
pass
else:
# expose a single user
pass
def post(self):
# create a new user
pass
def delete(self, user_id):
# delete a single user
pass
def put(self, user_id):
# update a single user
pass
如此,我們怎樣把它掛載到路由系統(tǒng)中?添加兩條規(guī)則,并且為每條規(guī)則顯式地 指出 HTTP 方法:
user_view = UserAPI.as_view('user_api')
app.add_url_rule('/users/', defaults={'user_id': None},
view_func=user_view, methods=['GET',])
app.add_url_rule('/users/', view_func=user_view, methods=['POST',])
app.add_url_rule('/users/<int:user_id>', view_func=user_view,
methods=['GET', 'PUT', 'DELETE'])
如果你有許多看起來類似的 API ,你可以重構上述的注冊代碼:
def register_api(view, endpoint, url, pk='id', pk_type='int'):
view_func = view.as_view(endpoint)
app.add_url_rule(url, defaults={pk: None},
view_func=view_func, methods=['GET',])
app.add_url_rule(url, view_func=view_func, methods=['POST',])
app.add_url_rule('%s<%s:%s>' % (url, pk_type, pk), view_func=view_func,
methods=['GET', 'PUT', 'DELETE'])
register_api(UserAPI, 'user_api', '/users/', pk='user_id')
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: