原文照搬:
由于Django的产品周期问题,我们决定将Django从当前开发的1.8版本升级到2.0版本,此新最版本已不再支持python2,所以开发语言也需要相应升级到3.6版本。其间几个重要的变更技术点节录如下(以更改过程为主,不区别django还是python变更,且django中的变化也不一样是2.0中才开始具有的):
Python3中,print从语句变为函数,所以所有的print语句需要改成print()
在django 2中,models中on_delete=models.XXX不再是默认选项,需要显性指定
# 表示外键关联到作者表,当作者表删除了该条数据,图书表中不删除,仅仅是把外键置空
author = models.ForeignKey(AuthModel, null=True, blank=True, on_delete=models.SET_NULL)
在新版本django中,这些包不再归于core,而是属于django.urls包,需要更改import路径
from django.urls import reverse
在新版本django中,中间件的key值由MIDDLEWARE_CLASSES变更为MIDDLEWARE
在新版本django中SessionAuthenticationMiddleware这个中间件不需要了。
新版本django中render_to_response不建设使用,改为使用render函数。
新版本python后,django的models定义需要从__unicode__变更到__str_
新版python中字典的has_key方法取消,建议用”str” in dict判断
新版django中,orm多对多外健不再用=等赋值,改为set方法
new_list = [obj1, obj2, obj3]
e.related_set = new_list ===》 e.related_set.set([obj1, obj2, obj3])
在使用PyCryptodome作AES加密解密时,注意python3里decode和encode的使用
str(b'','utf8')可以吧BYTES转换成unicode;bytes('','utf8')反向操作
在django升级之后,makemigration重作,migrate可能需要手工增加on_delete=models.XXX
如果安装好新版python3解释之后,通过更改active文件中的路径,可以实现拷贝目录通用.
参考文档:https://yq.aliyun.com/articles/324355
管理员下修改:
C:\Program Files\Anaconda3\Lib\site-packages\formtools\wizard打开views.py文件
修改第5行内容为:
from django.urls import reverse
推荐一个改错的参考文档:
django2.0集成xadmin0.6报错集锦:http://www.lybbn.cn/data/bbsdatas.php?lybbs=50