题记
话说是光阴似箭,日月如梭,Django 1.7 才用不久,又全面升级到 1.8 了。
看了一下版本发行文档,1.8 里面添加了不少激动人心的特性,在模型的操作上,以及模板的支持上都有了大幅了提升,例如添加了原生支持 Models._meta
方法和 原生 Jinja2 的支持。
发现很多 django 的升级都是社区的插件倒逼内核进行改革,这点其实相当不错,希望未来借由社区的力量可以慢慢改掉 Django 那种无谓的洁癖。
时间不充分,这些激动人心的特性就不在这里列举了,请自行查看文档。
下面仅简要记录相关的升级过程,只记录在 Windows 开发环境下的情况:
1. 直接更新
pip uninstall django
pip install django==1.8
2. 数据库引擎需要改变
这次的升级,一升级就崩了,原因是原来的数据库引擎不支持。
记得开始用的时候没有找到合适的 windows 下面支持 python3 的 mysql 驱动,因此一直用的是 cymysql,这次官方有了更新,可以使用推荐的 mysqlclient
驱动,请看文档:
https://docs.djangoproject.com/en/1.8/ref/databases/#mysql-db-api-drivers
意思就是说要更新引擎:
pip install mysqlclient
搞好之后,在控制台调用 import MySQLdb
应当成功。
成功之后,在 settings.py
里面将数据库的 ENGINE
改为 django.db.backends.mysql
。
改好之后再跑,控制台会要求先 migrate 一次,直接 migrate 就好了。
ATTENTION!
注意在 ubuntu 下面执行:
pip3 install mysqlclient
的时候会报错,具体参见 Stackoverflow 的问题:
解决办法是,先执行:
sudo apt-get install libmysqlclient-dev
然后就可以了。
3. 语言代码 zh-cn
被 deprecate
跑起来的时候,会提示 zh-cn
的语言代码被舍弃,需要更换为 zh-hans
。
C:\Python34\lib\site-packages\django\utils\translation\__init__.py:146: RemovedInDjango19Warning: The use of the language code 'zh-cn' is deprecated. Please use the 'zh-hans' translation instead.
return _trans.activate(language)
这个在 settings.py
里面加上就好了。
4. Migration 提示的一些错误
migration 的功能更加智能了,模型定义里面有一些不合理的设置会自动提示出现,例如我遇到的(这些只是我这里遇到的个案):
System check identified some issues:
WARNINGS:
erp.LoginToken.user: (fields.W342) Setting unique=True on a ForeignKey has the same effect as using a OneToOneField.
HINT: ForeignKey(unique=True) is usually better served by a OneToOneField.
erp.MissionTrigger.action: (fields.W122) 'max_length' is ignored when used with IntegerField
HINT: Remove 'max_length' from field
很人性化的提示,搞好之后,我就按照提示将这些改掉了。
5. 内置视图的一些警告:
D:\app\ecerp\erp\urls\__init__.py:8: RemovedInDjango19Warning: Default value of 'RedirectView.permanent' will change from True to False in Django 1.9. Set an explicit value to silence this warning.
url(r'^favicon\.ico$', RedirectView.as_view(url='/static/erp/img/favicon.ico')),
这段的意思说 RedirectView 里面的跳转以前默认是 301 的,但是将来在 1.9 的时候就会被 deprecate,因此需要显式声明,将上面的代码改成:
url(r'^favicon\.ico$', RedirectView.as_view(url='/static/erp/img/favicon.ico', permanent=True)),
然后就不会警告了。
【转载请附】愿以此功德,回向 >>
原文链接:http://www.huangwenchao.com.cn/2015/04/django-1-8-upgrade.html【Django updgrading to 1.8】