在Tornado中将JSON转换为经过验证的python对象?

时间:2012-09-19 07:05:16

标签: python mongodb tornado mongokit

我正在使用基本的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()

0 个答案:

没有答案