营销型手机网站,小程序商城哪家好些,百度爱采购下载app,网站结构有哪几种Flask使用的正例和反例 文章目录 Flask使用的正例和反例一 #xff0c; 使用注册异常二 #xff0c; 新增数据成功后要返回新增数据的id三#xff0c; 模型查询语句抽取成函数四#xff0c; 业务逻辑函数传递的参数不应该用字典类型#xff0c;要传不同字段的参数#xf…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(vertexesstr(vertexes),dataset_namedataset_name,grid_sizeint(grid_size),area_typearea_type,target_numtarget_num,point_numlen(target_points),start_timedatetime.strptime(start_time, %Y-%m-%d %H:%M:%S),end_timedatetime.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(vertexesstr(vertexes),dataset_namedataset_name,grid_sizeint(grid_size),area_typearea_type,target_numtarget_num,point_numlen(target_points),start_timedatetime.strptime(start_time, %Y-%m-%d %H:%M:%S),end_timedatetime.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):staticmethoddef get_by_id(_id: int):return TargetModel.query.filter_by(id_id).first() #模型查询类包含这个模型的不同功能查询语句
class PointModel(BaseModel):staticmethoddef 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.paramsdelete_docs(params) #传递的是字典看不出里面有多少参数参数的类型return Response()
def delete_docs(params):删除文档doc_ids params.get(doc_ids)正例
class DocListHandler(BaseHandler):文档列表相关操作def delete(self):params self.paramsdoc_ids params.get(doc_ids)delete_docs(doc_ids) #传递参数return Response()
def delete_docs(doc_ids):pass