Flask使用的正例和反例
Flask使用的正例和反例
文章目录
- Flask使用的正例和反例
- 一 , 使用注册异常
- 二 , 新增数据成功后要返回新增数据的id
- 三, 模型查询语句抽取成函数
- 四, 业务逻辑函数传递的参数不应该用字典类型,要传不同字段的参数,做拆分
一 , 使用注册异常
优点:一般web框架都有异常注册的功能,功能异常注册异常可以很好的将业务逻辑和框架结合起来
反例:
def search_model(params):
"""查询模型"""
search_key = params.get('search_key')
page = params.get('page', 1)
size = params.get('size', 10)
if not all([search_key, page, size]):
return "缺少参数" #错误点
正例:
def search_model(params):
"""查询模型"""
search_key = params.get('search_key')
page = params.get('page', 1)
size = params.get('size', 10)
if not all([search_key, page, size]):
raise TipResponse("缺少参数") #使用框架中异常注册的功能
二 , 新增数据成功后要返回新增数据的id
优点: 可以直观的通过返回的数据id,确认数据是否新增成功
反例:
def insert_dataset(params):
"添加训练集"
vertexes = params.get('vertexes')
dataset_name = params.get('dataset_name')
start_time = params.get('start_time')
end_time = params.get('end_time')
grid_size = params.get('grid_size')
dataset = DatasetModel(
vertexes=str(vertexes),
dataset_name=dataset_name,
grid_size=int(grid_size),
area_type=area_type,
target_num=target_num,
point_num=len(target_points),
start_time=datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S"),
end_time=datetime.strptime(end_time, "%Y-%m-%d %H:%M:%S"),
data_path=''
)
session.add(dataset)
session_commit() #新增数据完成后没有返回值
正例:
def insert_dataset(params):
"添加训练集"
vertexes = params.get('vertexes')
dataset_name = params.get('dataset_name')
start_time = params.get('start_time')
end_time = params.get('end_time')
grid_size = params.get('grid_size')
dataset = DatasetModel(
vertexes=str(vertexes),
dataset_name=dataset_name,
grid_size=int(grid_size),
area_type=area_type,
target_num=target_num,
point_num=len(target_points),
start_time=datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S"),
end_time=datetime.strptime(end_time, "%Y-%m-%d %H:%M:%S"),
data_path=''
)
session.add(dataset)
session_commit()
return dataset.dataset_id #增加新增结果成功后返回值
三, 模型查询语句抽取成函数
优点: 方便各个模块之间的复用,或者更换数据库
反例:
def get_target_points(params):
"""
获取所有的目标的踪迹点
"""
target_id = params.get('target_id')
target = TargetModel.query.get(target_id) #模型查询语句
if not target:
raise TipResponse('数据不存在')
points = PointModel.query.filter(PointModel.target_id == target_id).all() #模型查询语句
points_result = []
for point in points:
points_result.append([float(point.longitude), float(point.latitude)])
return points_result
正例:
class TargetModel(BaseModel):
@staticmethod
def get_by_id(_id: int):
return TargetModel.query.filter_by(id=_id).first() #模型查询类,包含这个模型的不同功能查询语句
class PointModel(BaseModel):
@staticmethod
def get_by_target_id(_id: int):
return PointModel.query.filter_by(PointModel.target_id=_id).all() #模型查询类,包含这个模型的不同功能查询语句
def get_target_points(params):
"""
获取所有的目标的踪迹点
"""
target_id = params.get('target_id')
target = TargetModel.get_by_id(target_id) #模型查询语句
if not target:
raise TipResponse('数据不存在')
points = PointModel.get_by_target_id(target_id) #模型查询语句
points_result = []
for point in points:
points_result.append([float(point.longitude), float(point.latitude)])
return points_result
四, 业务逻辑函数传递的参数不应该用字典类型,要传不同字段的参数,做拆分
优点: 方便查看参数的类型,传递的参数的个数
反例:
class DocListHandler(BaseHandler):
'''
文档列表相关操作
'''
def delete(self):
params = self.params
delete_docs(params) #传递的是字典,看不出里面有多少参数,参数的类型
return Response()
def delete_docs(params):
"删除文档"
doc_ids = params.get('doc_ids')
正例:
class DocListHandler(BaseHandler):
'''
文档列表相关操作
'''
def delete(self):
params = self.params
doc_ids = params.get('doc_ids')
delete_docs(doc_ids) #传递参数
return Response()
def delete_docs(doc_ids):
pass