0

我无法创建 API 以返回 JSON 格式的日期字段。所以我不得不创建一个函数来序列化它。dump_datetime 函数为我做这件事。我现在的问题是,每当我抛出 GET Resource 请求时,我不知道如何让我的资源调用运行 dump_datetime 调用。

假设我们有一个资源用户,它有一个“生日”属性。如何使“birthdate”属性通过 dump_datetime() 函数?

Since in Eve you could already get the item call by  http://127.0.0.1:5000/users/id

如何设置 get 调用以通过 dump_datetime?

我的问题清楚吗?

下面是一个使用我制作的反序列化函数的自定义函数示例。我只想知道如何让它在 Eve Item 和 Resource 调用中工作。

email = db.Column(db.String(120), unique=True)
def dump_datetime(value):
    """Deserialize datetime object into string form for JSON processing."""
    if value is None:
        return None
    return value.strftime("%Y-%m-%d")

@app.route('/test', methods=['GET'])
def test_mail():
  bdate = datetime.datetime.strptime( '19900914', "%Y%m%d").date()
  b = dump_datetime(bdate)
  return jsonify(results = b)

更新:我应该编辑 /var/www/healthyoptions-middleware/eve/methods/get.py 文件并为需要序列化的属性运行序列化函数??????

4

1 回答 1

0

如果我明白你在问什么,你所需要的就是使用事件挂钩。GET 方法上的请求后挂钩和您想要的资源应该可以解决问题;例如on_post_GET_<resource_name> = deserializing_function。或者,您可以挂钩数据库请求,例如 on_fetched_resource_。

从文档中:

当执行了 GET、POST、PATCH、PUT、DELETE 方法时,会引发 on_post_ 和 on_post__ 事件。您可以使用多个回调函数订阅这些事件。回调将接收访问的资源、原始的 flask.request 对象和响应负载。

数据库事件挂钩的工作方式类似于请求事件挂钩。这些事件在数据库操作之前和之后触发。

http://python-eve.org/features.html#event-hooks

于 2014-10-14T17:35:57.657 回答