You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask路由返回datetime对象报错:'datetime.datetime'对象不可调用

解决Flask路由返回datetime对象报错的问题

我来帮你排查这个问题——你遇到的错误核心原因是Flask视图函数不能直接返回Python原生的datetime对象(或其他非响应类型的对象),Flask无法自动将这类对象转换成HTTP响应格式,所以才会抛出TypeError: 'datetime.datetime' object is not callable这个错误。

先给你梳理下问题里的两个小问题,再给出解决方案:

第一步:修正路由的语法错误

你当前的路由有两处小问题,先改了它们:

  • 路由变量需要用尖括号包裹:/action/corrective/realize/<corrective_id>,否则Flask无法识别corrective_id作为路由参数
  • 请求方法参数是复数methods,不是method

修正后的路由定义应该是:

@app.route('/action/corrective/realize/<corrective_id>', methods=['GET'])

第二步:正确返回datetime类型的属性

Flask支持的响应类型包括字符串、JSON响应、Response对象等,所以我们需要把datetime对象转换成这些可接受的类型,这里给你几种常用方案:

方案1:返回格式化的日期字符串

把datetime转成ISO标准格式的字符串,或者自定义格式的字符串,直接返回即可:

@login_required
def realize_corrective(corrective_id):
    correctiveAction = CorrectiveAction.query.filter_by(id=corrective_id).first()
    if not correctiveAction.realized_date:
        correctiveAction.realized_date = datetime.utcnow()
        db.session.commit()
    # 转成ISO标准格式字符串,比如 "2018-05-23T17:51:53.621000"
    return correctiveAction.realized_date.isoformat()
    # 或者自定义格式,比如 "%Y-%m-%d %H:%M:%S"
    # return correctiveAction.realized_date.strftime("%Y-%m-%d %H:%M:%S")

方案2:返回JSON格式响应

如果前端需要JSON格式的数据,可以用Flask的jsonify方法,把日期转成字符串后放入JSON中:

from flask import jsonify

@login_required
def realize_corrective(corrective_id):
    correctiveAction = CorrectiveAction.query.filter_by(id=corrective_id).first()
    if not correctiveAction.realized_date:
        correctiveAction.realized_date = datetime.utcnow()
        db.session.commit()
    return jsonify({
        "realized_date": correctiveAction.realized_date.isoformat(),
        "action_id": correctiveAction.id
    })

为什么其他属性也会报错?

你提到返回对象的其他属性也会出现同类错误,这是因为比如foo_text是字符串类型的话其实可以直接返回,但如果是整数、模型对象这类非字符串/响应类型的对象,Flask同样无法处理。比如如果返回correctiveAction.id(整数),也会触发类似的错误,解决思路一样:转换成字符串或者放入JSON中返回。

内容的提问来源于stack exchange,提问作者Fratass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:51:29