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代码发现没效果,害我调试半天,心态崩了。
django解决Cookie不能存入中文字符问题
如何在cookie中获取中文字符编码问题
res.set_cookie('cookie',"我是COOKIE")
Cookie中是不能设置中文字符的
网上大部分的说的是用一下三种方式解决,千篇一律的做法
笔者试过这三种,完全不起作用
浏览器控制台依旧不能产生中文字符的Cookie
笔者曾想到使用encode('utf-8')将中文转为二进制在存入Cookie中,存入确实是可以,但是问题来了,从Cookie取出来的确实字符串格式的二进制编码,什么鬼?
cookie存进去的是二进制b'\xe7\x93\x9c',取出来的却是字符串“b'\xe7\x93\x9c'”什么鬼?
想不到怎么把变为字符串二进制转回为中文字符。
笔者最终想到了使用json模块
存入Cookie
u=json.dumps("我是COOKIE")
print(u)#"\u6211\u662fCOOKIE"
print(type(u),"#######")
res = redirect('/index/seek/')
res.set_cookie('seek',u)
return res
取出Cookie
seek = request.COOKIES.get('seek')
# print(seek)
import json
seek=json.loads(seek)
print(seek)#我是Cookie
json.dumps()自动将字符串中的中文转成Unicode格式"\u6211\u662fCOOKIE"
再通过json.loads()将其转成中文
参考
网友评论