我正在使用基本的post / get / put / delete方法在Tornado和MongoKit(MongoDB的ORM验证器)中编写一个玩具应用程序。例如,此REST API请求'http:// localhost:8888 / user'与body {“username”:“dhh”,“datetime_joined”:“2012-08-04 20:05:12”}应该创建一个新的mongo集合中的文档。 datetime_joined是JSON中的字符串,但是MongoKit类中的日期时间。有没有比明确将字符串转换为datetime更好的方法,如下面的代码所示?它适用于结构中的日期时间(如'datetime_joined'),但显然不适用于转换嵌套的日期时间(如下例中的'datetime_created')。除非您以递归方式将字符串转换为日期时间。总而言之,将表示日期的字符串转换为MongoKit中的日期时间是一种很好的做法吗?
这是我的示例代码供参考:
def string_to_datetime(value):
if value is not None:
return datetime.strptime(value, '%Y-%m-%d %H:%M:%S')
return None
class User(Document):
structure = {
'username': basestring,
'datetime_joined': datetime,
'info': {
'email': basestring,
'datetime_created': datetime
}
}
class APIHandler(tornado.web.RequestHandler):
SUPPORTED_METHODS = ("GET", "HEAD", "POST", "DELETE", "PATCH", "PUT", "OPTIONS")
def initialize(self):
self.conn = Connection()
self.conn.register([User])
self.clazz = self.conn.User
def post(self):
service = json.loads(self.request.body)
service_document = self.clazz()
for key in service:
if key.startswith('datetime'):
service_document[key] = string_to_datetime(service[key])
else:
service_document[key] = service[key]
service_document.validate()
service_document.save()