django报错:TypeError: __str__returned non-string (type bytes)
某个django项目从python2迁移到python3的过程中,出现了以下问题:
TypeError: __str__returned non-string (type bytes)
经查证,是模型类中的 str 方法造成的,原因是python3中 str 不能接收bytes类型的数据,这和python2/3的编解码方式是有关系的。
下面给出python2和python3的写法:
# 类型名称
typename = models.CharField(max_length=50)
# 逻辑删除
isDelete = models.BooleanField(default=False)
def __str__(self):
return self.typename.encode("utf-8") # python2写法
return self.typename # python3写法
class Meta:
verbose_name = '文章类型'
verbose_name_plural = '文章类型'
这个问题也会倒是无法查询数据库,在我制作用户名注册时使用ajax验证用户名是否已存在时,这个问题困扰了我好久,一直无法解决,因为没有报错信息,通过各种调试都没有找到问题出在了哪,最后决定使用django的admin管理界面来查看数据库时,发现了这个报错,替换为py3写法后成功解决,虽然很恼火,但是也受益良多,对于整个逻辑也更清晰了,调试能力也上升了。
js,css改动无法即时体现
初次进行web工程开发的人可能会碰到这样的情况:自己在明明对工程上的某个js或css文件进行了修改,并提交到服务器上去了。但是在客户端浏览器里面打开页面时,并没有看到修改后的效果,而是该js文件的旧版本的效果。
如果了解过浏览器缓存就知道,为了效率,浏览器通常会缓存js/css文件。如果没有清除浏览器缓存的该js文件的话,js的修改效果就不会起作用,因为浏览器还是用的缓存在本地的js文件。
所以需要清空浏览器缓存数据
md,之前改了js代码发现没效果,害我调试半天,心态崩了。