uliweb guestbook 排错

 

uliweb作者是国内python高手limodou,一直在他写的用ulipad,感觉很不错。

今天抽空看了一下uliweb的教程,把uliweb里面自带的demo guestbook用svn下载下来试了一下,结果出错了。出错图如下所示:

uliweb guestbook 排错_第1张图片

一头雾水,秉承"知之为知之,不知google之"的优良传统,搜一下,也没什么结果,可能uliweb还是比较新的东西,大家接触并讨论的比较少。看起来这次要靠自己了。仔细看了一下错误,是说datetime的值为None,没有strftime属性。有点类似C中的空指针啦。

最后把错误定位在 /demos/guestbook/apps/GuestBook/models.py代码如下

from uliweb.orm import * import datetime class Note(Model): username = Field(str) message = Field(text) homepage = Field(str) email = Field(str) datetime = Field(datetime.datetime, auto_now_add=True) 

如果猜的不错,应该是最好一句Field返回值为空。

为了验证我的猜测,只有到源代码中需找答案了,Field 的datetime功能是由orm模块DateTimeProperty,打开文件/uliweb/orm/__init__.py(版本是SVN:223)

转到第337行查看DateTimeProperty类的构造函数

 

  def __init__(self, verbose_name=None, auto_now=False, auto_now_add=False, **kwds): super(DateTimeProperty, self).__init__(verbose_name, **kwds) self.auto_now = auto_now self.auto_now_add = auto_now_add def validate(self, value): value = super(DateTimeProperty, self).validate(value) if value and not isinstance(value, self.data_type): raise BadValueError('Property %s must be a %s' % (self.name, self.data_type.__name__)) return value # def default_value(self): # if self.auto_now or self.auto_now_add: # return self.now() # return Property.default_value(self) # def get_value_for_datastore(self, model_instance): if self.auto_now: return self.now() else: return super(DateTimeProperty, self).get_value_for_datastore(model_instance) 

 

呵呵,问题应该就出在注释掉的几行,我查询了一下SVN的log,应该是在220和221版本之间修改了这几行。

有个疑问是 auto_now_add和 auto_now有什么区别吗?这个还没想想通。

 

我们就找到了解决这个问题的方法了:

将 /demos/guestbook/apps/GuestBook/models.py中的最后一行的auto_now_add 修改为 auto_now即可:

 

#datetime = Field(datetime.datetime, auto_now_add=True) datetime = Field(datetime.datetime, auto_now=True) 

 

总体来说,uliweb还是挺不错的,比django还容易上手,继续学习……

 

你可能感兴趣的:(django,SVN,python,Google,email,import)