蜡笔不小心 2021-02-25 14:37 采纳率: 0%
浏览 25

请问这个装饰器怎么写?

@app.route('/install', methods=['POST'], endpoint="install")
def install_sds():
    task = Task("安装SDS系统")
    ip = request.json.get("ip")
    vip = request.json.get("vip")
    password = request.json.get("password")
    node_ip_list = request.json.get("nodesip")
    logservice = request.json.get("logservice")
    ret = install(ip, vip, password, node_ip_list, logservice)
    return comment_resp(ret, task)

由于很多类似的函数,前面一句

task = Task("****")

最后的return 也是相同的

return comment_resp(ret, task)

可以怎么抽象出一个装饰器了?

 

  • 写回答

1条回答 默认 最新

  • 平行时空Times 2023-04-21 18:01
    关注

    我可以建议您编写一个装饰器函数来实现这个抽象。装饰器函数需要接收一个原始的函数作为参数,并返回一个新的函数。在返回的新函数内部,您可以使用相同的逻辑来处理任务创建、执行原始函数和返回结果等步骤。以下是一个可能的装饰器函数的示例代码:

    
    ```python
    def comment_task(f):    def wrapper(*args, **kwargs):        task = Task("".join([f.__name__, "任务"]))        ret = f(*args, **kwargs)        return comment_resp(ret, task)    return wrapper
    
    

    您可以将这个装饰器函数应用于您的每个处理函数,即可实现相同的任务记录和返回结果的逻辑。例如:

    
    
    @app.route('/install', methods=['POST'], endpoint="install")@comment_taskdef install_sds():    # ...  您原来的实现代码 ...
    
    

    注意,在使用装饰器时,将装饰器函数放在您处理函数定义的紧上方,使用 @decorator_name 的语法即可。这样,请求经过 Flask 框架路由处理后,将交由装饰器函数处理,并返回一个新的、带任务记录的、调用原处理函数得到的响应。
    ```

    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办