我正在用Flask RESTful框架撰寫API。對于每一個端點,我都需要進行檢查,這些端點的結構是相同的,但里面的流程是不同的。下面是這個片段。
def get_all_users():
users = [{"name":"John","dob":"12-10-1990"}, {"name": "David","dob":"25-03-1995"}, {"name": "Maria","dob":"30-02-1998"]
return users
端點1:
class ClassOne(Resource)。
def get(self)。
# 從正文中獲取所需資訊。
res_body = request.json
name = res_body.get('name', None)
item_list = []
if name is None:
users = get_all_users()
for user in users:
item_list.append(user['name'] )
return {"nameList":item_list }
else:
user = get_user_data(user_info=name)
if user:
name = user['name']
return {"Message":"用戶{}存在!".format(name)}。
else:
return {"Error":"user does not exist"}.
return "基于上述程序的輸出"。
端點2:
class ClassTwo(Resource)。
def get(self)。
# 從正文中獲取所需資訊。
res_body = request.json
name = res_body.get('name', None)
item_list = []
if name is None:
users = get_all_users()
for user in users:
item_list.append(user['dob'])
return {"nameList":item_list }
else:
user = get_user_data(user_info=name)
if user:
dob = user['dob']
return {"Message":"User dob is {}".format(dob)}。
else:
return {"Error":"user does not exist"}。
return "基于上述程序的輸出"。
通過避免代碼重復,什么是撰寫這些代碼的最佳方式。
uj5u.com熱心網友回復:
假設Resource沒有.get(),你的端點類除了Resource之外,還可以繼承自一個普通的Process類或任何你想叫的東西:
class Process。
def get(self, user_key)。
res_body = request.json
name = res_body.get("name")
if name is None:
item_list = []
users = get_all_users()
for user in users:
item_list.append(user.get(user_key))
return {"nameList": item_list }
else:
user = get_user_data(user_info=name)
if user:
info = user.get(user_key)
return {"Message"/span>: f "用戶{user_key}是{info}"} 。
return {"Error"/span>。"用戶不存在"}。
class ClassOne(資源,流程)。
def __init__(self):
super().__init__()
def get(self)。
return super().get(user_key="name"/span>)
class ClassTwo(資源,行程)。
def __init__(self)。
super().__init__()
def get(self)。
return super().get(user_key="dob"/span>)
下面是這個繼承結構的一個快速演示:
在[1]。class Grandparent。 # Resource
...: pass: # resource.
...:
在[2]。class Parent。 # Process: Parent.
...: def get(self, x, y)。
...: print(x, y)
...:
在[3]。class ChildA(Grandparent, Parent)。 # 端點1
...: def get(self)。
...: super().get(1, 2)
...:
在[4]。class ChildB(Grandparent, Parent)。 # 端點2
...: def get(self)。
...: super().get("hello"/span>, "world"/span>)
...:
在[5]: a = ChildA()
在[6]: b = ChildB()
在 [7]: a.get()
1 2: a.get()
在[8]: b.get()
你好,世界
另外,你可以簡單地讓Process繼承于Resource,然后讓你的端點繼承于Process。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/316986.html
標籤:
