当前位置: 首页 > article >正文

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

http://www.kler.cn/a/457343.html

相关文章:

  • 数据结构考前一天
  • Linux终端输入删除键backspace显示^H,输入上下左右键显示^A^B^C^D原理以及详细解决办法!
  • Fabric环境部署
  • 41.5 nginx拦截prometheus查询请求使用lua脚本做promql的检查替换
  • ensp QOS的配置
  • Android 系统 ActivityManager 系统层深度定制
  • SpringBoot整合篇 05、Springboot整合Redission
  • flask-admin 模型视图(modelView)中重写after_model_delete与on_model_delete
  • 力扣-数据结构-6【算法学习day.77】
  • 李永乐线性代数:A可逆,AX=B相关推论和例题解题思路
  • 【探花交友】day06—即时通信
  • [openGauss 学废系列]- openGauss体系结构-多个用户访问同一个数据库
  • Mooncake:kimi后端推理服务的架构设计
  • DOM解析:深入理解文档对象模型
  • Elasticsearch 数据存储底层机制详解
  • C++进阶-【高级语法】
  • 使用GitHub Pages部署静态网站:简易指南
  • 《Vue进阶教程》第二十四课:优化
  • c++ 里 常量转换 const_cast < T > ,要给模板参数 T 传递什么类型呢?
  • iClient3D for Cesium 加载shp数据并拉伸为白模
  • Node.js 工具:在 Windows 11 中配置 Node.js 的详细步骤
  • 影刀进阶应用 | 知乎发布想法
  • EMQX5.X版本性能配置调优参数
  • NSSCTF-web刷题
  • 爬虫入门二 beautifulsoup
  • 一个通用的居于 OAuth2的API集成方案