17

假设我的 get 方法中有以下解析器:

from flask.ext.restful import reqparse

parser = reqparse.RequestParser()
parser.add_argument('when', type=datetime, help='Input wasn\'t valid!')

然后我想用 curl 测试所说的 get 方法......

curl --data "when=[WHAT SHOULD I WRITE HERE?]" localhost:5000/myGet

所以问题是,我应该如何调用 get 方法?我尝试了许多不同的格式,尝试阅读 rfc228 标准等,但我无法找出正确的格式。

4

2 回答 2

26

有点晚了,但我刚刚遇到了同样的问题,试图用 RequestParser 解析日期时间,遗憾的是文档对这种情况没有太大帮助,所以在查看和测试 RequestParser 和 Argument 代码之后,我想我发现了问题:

当你type=datetimeadd_argument方法中使用时,它只是datetime用 arg 调用,像这样:datetime(arg),所以如果你的参数是这样的字符串:2016-07-12T23:13:3,错误将是an integer is required

就我而言,我想将具有这种格式的字符串解析%Y-%m-%dT%H:%M:%S为 datetime 对象,所以我想使用类似的东西,type=datetime.strptime但你知道这个方法需要一个格式参数,所以我最终使用了这个解决方法:

parser.add_argument('date', type=lambda x: datetime.strptime(x,'%Y-%m-%dT%H:%M:%S'))

如您所见,您可以使用所需的任何日期时间格式。您也可以使用partialfunctool 而不是 lambda 来获得相同的结果或命名函数。

此解决方法在 docs 中

于 2016-08-04T07:44:58.543 回答
6

只是对 Flask-Restful (0.3.5) 的更新:如果 ISO 8601 或 RFC 822 足够,则可以使用自己的库日期和日期时间功能解析:

from flask_restful import inputs

parser.add_argument('date', type=inputs.datetime_from_iso8601)

所以要求是,

curl --data "date=2012-01-01T23:30:00+02:00" localhost:5000/myGet

文档

于 2020-07-15T23:16:38.360 回答