Преобразование JSON в проверенные объекты Python в Tornado?
Я пишу игрушечное приложение на Tornado и MongoKit (валидатор ORM для MongoDB) с базовыми методами post/get/put/delete. Например, этот запрос API REST 'http://localhost:8888/user' с телом {"username": "dhh", "datetime_joined": "2012-08-04 20:05:12"} должен создать новый документ в коллекции монго. datetime_joined - это строка в JSON, но datetime в классе MongoKit. Есть ли лучший способ сделать это, чем явное преобразование строки в datetime, как показано в коде ниже? Он отлично работает для datetime в структуре (например, datetime_joined), но, очевидно, не работает для преобразования вложенных datetime (например, datetime_created в приведенном ниже примере). Если вы не конвертируете строки в datetime рекурсивно. Подводя итог, что является хорошей практикой для преобразования строк, которые представляют даты в datetime в 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()