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

Pap*_*urf 2 python django python-2.7 python-3.x

我有一个用 1.8 构建的大型 django 项目,包含大约 14 个应用程序和大量依赖项。

我已经很清楚如何将 2.7 代码更新到 3.6,或者可能只是使其与两者兼容,但是,我不确定重构/升级 django 的最佳实践和最有效的方法是什么框架从1.8升级到2.0。

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

预先感谢所有建议!

Nik*_*kur 5

    \n
  1. 首先,您应该更新所有包以支持 python\n3.6 和 Django 2.0。

    \n
  2. \n
  3. 在你的所有中,urls.py你应该将所有url功能更改为pathre_path

    \n

    url(\'some/\', Create.as_view()) # old version

    \n

    path(\'some/\', Create.as_view()) # new version

    \n
  4. \n
\n

namespace如果您在 main 中使用,urls.py则应该将 app_name 添加到每个应用程序的urls.py.

\n
app_name = \xe2\x80\x98app-name\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 搜索您的项目is_authenticated()并将其各处更改为is_authenticated. 它现在是一个属性,而不是一个方法。对 执行相同操作from django.core.urlresolvers import reverse,将其替换为from django.urls import reverse
  2. \n
  3. 现在每个ForeignKey模型字段都必须有一个on_delete参数。像这样:
  4. \n
\n

on_delete=models.CASCADE on_delete=models.DO_NOTHING on_delete=models.SET_NULL

\n

查看官方文档对此

\n

然后进行迁移:

\n
python manage.py makemigrations\npython manage.py migrate\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 接下来,settings.py您需要将您的更改MIDDLEWARE_CLASSESMIDDLEWAR\n然后更新MIDDLEWAR以匹配此:

    \n

    \'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\'

    \n
  2. \n
  3. 如果您在项目中使用自己的中间件,则应该继承自MiddlewareMixin,而不是继承object。所以你必须导入它

    \n

    from django.utils.deprecation import MiddlewareMixin

    \n
  4. \n
\n

查看官方文档以获取更多信息。下次先尝试做一下。

\n