升级过程中碰到的一些注意点,拿出来与大家分享,希望对正在或需要升级项目的朋友有帮助。
1、URL
Django1.6中使用的是如下代码
from django.conf.urls import patterns, url
from polls import views
urlpatterns = patterns('',
url(r'^$', views.index, name='index')
)
在Django1.10版本中,patterns方法已经被移除了,换成url即可:
from django.conf.urls import url
from polls import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
2、django-extensions
如果在项目中使用了django-extensions
,并且版本低于1.5.9,那么在项目升级的过程中,也要把django-extensions
升级到1.5.9版本。
命令直接用
pip install django-extensions==1.5.9
3、django-cors-headers
如果在项目中使用了django-cors-headers
,由于Django1.10已经不支持这个组件了,推荐使用django-cors-middleware
,具体命令如下。
首先移除django-cors-headers:
pip uninstall django-cors-headers
如果权限不够的话,在前面加上 sudo
。
然后安装django-cors-middleware
pip install django-cors-middleware
如果权限不够的话,在前面加上 sudo
。
4、South
如果在1.6版本项目中使用了South的话,还要做一下迁移的工作。步骤如下:
- 确认所有的
installs
都以South
创建的迁移完全更新。就是确认全部是要更新的。 - 从INSTALLED_APPS
中移除 'south'。 - 删除你所有的迁移文件(编号标识的),但不能删除所在目录或
__init__.py
(切记不可删除__init__.py
),也需确认删除.pyc
文件。 - 运行
python manage.py makemigrations
. Django应该看到空的迁移目录,并以新的格式进行新的初始迁移。 - 执行
python manage.py migrate --fake-initial
。Django会看到初始迁移的表已经存在,并将它们标记为已应用,而不运行它们。(Django不会检查表模式是否与您的模型匹配,只是正确的表名存在)。
迁移参考链接:http://python.usyiyi.cn/translate/django_182/topics/migrations.html
5、Templates
在升级之后,原来项目中settings.py
中对于TEMPLATES
的设置也失效了。
原项目的设置为:
TEMPLATE_DIRS = (
os.path.join(PROJECT_ROOT, 'frontend/dist/'),
)
升级之后修改为:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(PROJECT_ROOT, 'frontend/dist/')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]