我有一个内置于1.8的大型django项目,其中包含约14个应用程序和大量依赖项。
对于如何将2.7代码更新为3.6或可能使其与两者兼容,我已经有了一个好主意,但是,我不确定重构/的最佳实践和最有效方法是什么。将Django框架从1.8升级到2.0。
请记住这数千行代码,因此工作效率至关重要。
提前感谢所有建议!
答案 0 :(得分:1)
在所有urls.py
中,应将所有url
功能更改为path
或re_path
。
url('some/', Create.as_view()) # old version
path('some/', Create.as_view()) # new version
如果在主namespace
中使用urls.py
,则应将app_name添加到每个应用的urls.py
。
app_name = ‘app-name’
is_authenticated()
,然后将其各处更改为is_authenticated
。现在是属性,而不是方法。对from django.core.urlresolvers import reverse
执行相同操作,将其替换为from django.urls import reverse
。现在,每个ForeignKey
模型字段都必须具有一个on_delete
参数。像这样:
on_delete=models.CASCADE
on_delete=models.DO_NOTHING
on_delete=models.SET_NULL
Check the official documentation on this
然后进行迁移:
python manage.py makemigrations
python manage.py migrate
接下来,在settings.py
中,您需要将MIDDLEWARE_CLASSES
更改为MIDDLEWAR
然后更新MIDDLEWAR
以使其与此匹配:
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware'
如果在项目中使用自己的中间件,则应从MiddlewareMixin
继承,而不要从object
继承。因此,您必须导入
from django.utils.deprecation import MiddlewareMixin
Check out官方文档以获取更多信息。下次尝试执行此操作。