元件
- 接入類
- 對映類
- 動作類
接入類
主要做路由,限流,鑑權等接入放行性質的工作
class App:
action_map = {}
def dispatch(self, data):
try:
assert data["action"] in self.action_map, ErrorCode.sys_action_not_exist
action = self.action_map[data["action"]]
return {
"code": 0,
"msg": "",
"data": action.run(data["params"])
}
except AssertionError as e:
msg, code = e
return {
"code": code,
"msg": msg,
"data": None
}
except Exception:
traceback.print_exc()
msg, code = ErrorCode.sys_unknown
return {
"code": code,
"msg": msg,
"data": None
}
對映類
名稱到動作類的對映
action_map = {
`register`: RegisterAction
}
動作類
表達一個介面的實際業務邏輯操作,許可權,資料schema都在這裡進行配置
class RegisterAction(Action):
schema = Schema({
"verify_code": And(str, len),
"phone": And(str, len),
"password": And(str, len)
})
auth = False
def run(self, data):
assert check_verify_code(data["verify_code"]), MyErrorCode.verify_code_wrong
assert User.get(data["phone"]), MyErrorCode.already_register
return {"token": "token"}
業務邏輯
操作順序
- 資料結構與格式驗證,validate
- 資料正確性驗證,如驗證碼,密碼等,check
- 資料存在性驗證,exist
- 資料業務狀態驗證,status
- 資料業務更改操作並提交至資料庫,run
- 返回成功,return