flask-restful解析器的日期时间格式是什么?

19
假设我在我的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标准等等,但我无法找到正确的格式。


1
我刚刚注意到flask-restful网页上的文档似乎领先于它的时代,因此可能尚未实现datetime解析器(我正在使用版本0.2.12)。我不能确定。 - TukeV
如果您正在遵循文档,那么它可能是针对最新版本构建的,该版本尚未在pip中。您可以克隆GitHub项目并检查问题是否仍然存在。 - Harsh Daftary
2个回答

29

我也有过类似的问题,想用RequestParser解析日期时间格式的参数,但是文档并没有提供明确的帮助。在查看和测试RequestParser和Argument代码后,我发现了问题所在:

当你在add_argument方法中使用type=datetime时,它实际上在内部使用arg调用datetime, 类似于这样: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'))

您可以看到,通过这种方式,您可以使用任何datetime格式。您也可以使用partial functool代替lambda来获得相同的结果或命名函数。

这个变通方法在文档中有介绍。


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

来自文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接