如何设置Eve资源和项目调用以通过自定义反序列化功能

时间:2014-05-20 01:54:58

标签: python flask sqlalchemy flask-sqlalchemy eve

我无法创建我的API以JSON格式返回日期字段。所以我不得不创建一个序列化它的函数。 dump_datetime函数为我做了。 我现在的问题是,每当我抛出GET资源请求时,我都不知道如何让我的资源调用运行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项目和资源调用中运行。

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文件并为需要序列化的属性运行序列化函数?????

1 个答案:

答案 0 :(得分: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