Day 4 - 编写Model

    有了ORM,我们就可以把Web App需要的3个表用 Model 表示出来:

    import time, uuid



    from orm import Model, StringField, BooleanField, FloatField, TextField



    def nextid():

    return '%015d%s000' % (int(time.time() * 1000), uuid.uuid4().hex)



    class User(Model):

    table = 'users'



    id = StringField(primarykey=True, default=nextid, ddl='varchar(50)')

    email = StringField(ddl='varchar(50)')

    passwd = StringField(ddl='varchar(50)')

    admin = BooleanField()

    name = StringField(ddl='varchar(50)')

    image = StringField(ddl='varchar(500)')

    createdat = FloatField(default=time.time)



    class Blog(Model):

    __table
    = 'blogs'



    id = StringField(primary_key=True, default=next_id, ddl='varchar(50)')

    user_id = StringField(ddl='varchar(50)')

    user_name = StringField(ddl='varchar(50)')

    user_image = StringField(ddl='varchar(500)')

    name = StringField(ddl='varchar(50)')

    summary = StringField(ddl='varchar(200)')

    content = TextField()

    created_at = FloatField(default=time.time)



    class Comment(Model):

    __table
    = 'comments'



    id = StringField(primary_key=True, default=next_id, ddl='varchar(50)')

    blog_id = StringField(ddl='varchar(50)')

    user_id = StringField(ddl='varchar(50)')

    user_name = StringField(ddl='varchar(50)')

    user_image = StringField(ddl='varchar(500)')

    content = TextField()

    created_at = FloatField(default=time.time)

    在编写ORM时,给一个Field增加一个 default 参数可以让ORM自己填入缺省值,非常方便。并且,缺省值可以作为函数对象传入,在调用 save() 时自动计算。

    例如,主键 id 的缺省值是函数 next_id ,创建时间 created_at 的缺省值是函数 time.time ,可以自动设置当前日期和时间。

    日期和时间用 float 类型存储在数据库中,而不是 datetime 类型,这么做的好处是不必关心数据库的时区以及时区转换问题,排序非常简单,显示的时候,只需要做一个 float str 的转换,也非常容易。