如何设置Eve资源和项目调用通过自定义反序列化功能?
我无法让我的API返回JSON格式的日期字段,所以我不得不创建一个函数来处理这个问题。这个叫做dump_datetime的函数可以帮我完成这个任务。
现在我遇到的问题是,我不知道如何让我的资源调用在每次发起GET请求时都运行dump_datetime这个函数。
假设我们有一个用户资源Users,它有一个“出生日期”属性。我该如何让这个“出生日期”属性通过dump_datetime()函数呢?
Since in Eve you could already get the item call by http://127.0.0.1:5000/users/id
我该如何设置GET调用,让它经过dump_datetime呢?
我的问题清楚吗?
下面是我使用我自己创建的deserialize函数的一个自定义函数示例。我只是想知道如何让它在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文件,并为需要序列化的属性运行serialize函数???
1 个回答
0
如果我理解你的问题没错,你只需要使用事件钩子。对于GET方法和你想要的资源,使用一个请求后的钩子就可以了;比如说 on_post_GET_<resource_name> = deserializing_function
。另外,你也可以在数据库请求上设置钩子,比如 on_fetched_resource_
。
根据文档的说明:
当执行GET、POST、PATCH、PUT、DELETE方法时,会触发一个on_post_和on_post__事件。你可以用多个回调函数来订阅这些事件。回调函数会接收到被访问的资源、原始的flask.request对象和响应内容。
数据库事件钩子的工作方式和请求事件钩子类似。这些事件会在数据库操作前后触发。