将Django 1.8项目代码更新/升级到Django 2.0

时间:2018-09-23 14:47:04

标签: python django python-3.x python-2.7

我有一个内置于1.8的大型django项目,其中包含约14个应用程序和大量依赖项。

对于如何将2.7代码更新为3.6或可能使其与两者兼容,我已经有了一个好主意,但是,我不确定重构/的最佳实践和最有效方法是什么。将Django框架从1.8升级到2.0。

请记住这数千行代码,因此工作效率至关重要。

提前感谢所有建议!

1 个答案:

答案 0 :(得分:1)

  1. 首先,您应该更新所有软件包以支持python 3.6和Django 2.0。
  2. 在所有urls.py中,应将所有url功能更改为pathre_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’
  1. 在项目中搜索is_authenticated(),然后将其各处更改为is_authenticated。现在是属性,而不是方法。对from django.core.urlresolvers import reverse执行相同操作,将其替换为from django.urls import reverse
  2. 现在,每个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
  1. 接下来,在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'

  2. 如果在项目中使用自己的中间件,则应从MiddlewareMixin继承,而不要从object继承。因此,您必须导入

    from django.utils.deprecation import MiddlewareMixin

Check out官方文档以获取更多信息。下次尝试执行此操作。