Flask使用的正例和反例

发布于:2025-02-11 ⋅ 阅读:(59) ⋅ 点赞:(0)

Flask使用的正例和反例

一 , 使用注册异常

优点:一般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

网站公告

今日签到

点亮在社区的每一天
去签到