Django updgrading to 1.8

题记

话说是光阴似箭,日月如梭,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 的问题:

http://stackoverflow.com/questions/5178292/pip-install-mysql-python-fails-with-environmenterror-mysql-config-not-found

解决办法是,先执行:

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)),

然后就不会警告了。


【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2015/04/django-1-8-upgrade.html【Django updgrading to 1.8】

发表评论

电子邮件地址不会被公开。 必填项已用*标注