将Django从1.9版升级到2.0版

您好,今天我想告诉您如何将项目从1.9版升级到2.0版。 为了使项目在新版本的Django上启动,需要考虑和重写的主要细微差别是什么。

第一步


这是Django对2.0版的更新,也是项目中使用的所有相关软件包的更新,例如 我使用虚拟环境和requirements.txt,那么对我来说这是一种方法,对您来说可能有所不同。

更新所有软件包后,您不应启动该项目,它也不会启动,因此请立即开始修复所有要点,以便启动该项目。

第二步。 更新项目的所有urls.py


在您的主要urls.py中,其中包括来自其他应用程序的url,我们连接:
从django.urls导入re_path,路径。

并且我们将c url更改为path,并删除这些连接中的正则表达式。

url(r'^ some/', include('some.urls')), #   path('some/', include('some.urls')), 

如果您直接从需要常规的该应用程序中使用视图,则我们使用:

 re_path(r'^app/$', App.as_view(), name='app') 

在插件应用程序(例如,某些/ urls.py)中,在urls.py文件中,我们使用:

 re_path(r'^create/$', Create.as_view(), name='create') 

如果在包含过程中在URL中使用名称空间,则从那里删除它们,然后将它们直接传输到连接的应用程序。 我们转到此应用程序的urls.py并将其写在urlpatterns = []之上

 app_name = 'app-application' 

该行代替了命名空间,旨在使主urls.py更加整洁易读,并且方便在一个地方更改名称。

第三步


我们会在整个项目中使用搜索,具体取决于您在开发过程中使用的代码编辑器,这些可以是不同的热键,我想您知道它们,所以我不会在这里停止。

我们开车去:

 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 

接下来我们做:

 python manage.py makemigrations python manage.py migrate 

第五步


如果尝试启动该项目,则它应该已经启动,但是一旦您转到127.0.0.1:8000,它将立即给您一个错误。

错误将如下所示:

 AttributeError at / 'WSGIRequest' object has no attribute 'user' 

这是由于您需要将MIDDLEWARE_CLASSES重命名为MIDDLEWARE
接下来,您将在控制台中收到以下错误:

django.core.exceptions.ImproperlyConfigured: WSGI application 'application' could not be loaded; Error importing module: 'application doesn't look like a module path

发生此错误的原因是您有旧的中间件,并且必须将它们更新为:

 '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继承(您也可以使用object,但是您需要注册其他必需的方法)。

汇入:

 from django.utils.deprecation import MiddlewareMixin 

仅此而已! :)

当然,如果您有一个非常大的项目,并且使用了大量的程序包,那么您将遇到更多问题,但是控制台中的一系列错误已经可以帮助您解决它们,并以正确的模式启动项目。 本指南介绍了与所有使用Django 1.9的项目都相关的主要错误和解决方法(某些要点与Django 1.11版本无关),将有助于将项目更快地转移到Django 2.0,并避免不必要的分析和搜索时间解决常见错误的方法。

Source: https://habr.com/ru/post/zh-CN417837/


All Articles