Atualizando o Django da versão 1.9 para a versão 2.0

Olá, hoje eu gostaria de falar sobre como atualizar um projeto da versão 1.9 para a 2.0. Quais são as principais nuances a serem consideradas e reescritas para que o projeto inicie na nova versão do Django.

Primeiro passo


Esta é uma atualização do Django para a versão 2.0, bem como uma atualização de todos os pacotes relacionados que são usados ​​no projeto, como Eu uso o ambiente virtual e requirements.txt, então para mim essa é uma maneira, para você pode ser diferente.

Depois de atualizar todos os pacotes, você não deve iniciar o projeto, ele não será iniciado de qualquer maneira; portanto, comece imediatamente a corrigir todos os pontos principais para que o projeto inicie.

Segundo passo. Atualizando todos os urls.py do seu projeto


Em seus principais urls.py, nos quais você inclui URLs de outros aplicativos, conectamos:
do django.urls import re_path, path.

E alteramos o URL para path, assim como removemos expressões regulares nessas conexões.

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

Se você estiver usando visualizações diretamente deste aplicativo, o que exige regulares, usamos:

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

Nos aplicativos de plug-in (por exemplo, alguns / urls.py), no arquivo urls.py, usamos:

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

Se você usar espaço para nome em URLs durante a inclusão, exclua-os e transfira-os diretamente para o aplicativo conectado. Vamos para urls.py desta aplicação e escrevemos acima urlpatterns = []

 app_name = 'app-application' 

Essa linha atua como uma substituição do espaço para nome e foi projetada para tornar os principais urls.py mais limpos e legíveis, além da conveniência de alterar nomes em um só lugar.

Terceiro passo


Usamos a pesquisa em todo o projeto, dependendo do editor de código que você usa durante o desenvolvimento, essas podem ser teclas de atalho diferentes, acho que você as conhece, por isso não vou parar por aqui.

Nós dirigimos em:

 is_authenticated() 

E mude para is_authenticated . Agora, este não é um método, mas uma propriedade. Este erro lançará uma exceção.

Mais adiante no projeto, estamos procurando:

 from django.core.urlresolvers import reverse 

E mude para:

 from django.urls import reverse 

Quarto passo


Agora em todos os modelos.ForeignKey, deve haver um argumento posicional obrigatório "on_delete", por exemplo:

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

Em seguida, fazemos:

 python manage.py makemigrations python manage.py migrate 

Quinto passo


Se você tentar iniciar o projeto, ele já deverá ser iniciado, mas imediatamente ocorrerá um erro assim que você for para 127.0.0.1:8000.

O erro será o seguinte:

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

Isso ocorre porque você precisa renomear MIDDLEWARE_CLASSES para MIDDLEWARE
Em seguida, você receberá o seguinte erro no console:

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

Este erro ocorre porque você possui um middleware antigo e deve atualizá-los para:

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

Sexto passo


Se você usar seu próprio middleware no projeto, eles deverão ser herdados do MiddlewareMixin, e não do objeto (você também pode usar o objeto, mas precisará registrar métodos adicionais necessários).

Importar:

 from django.utils.deprecation import MiddlewareMixin 

Isso é tudo! :)

Obviamente, se você tem um projeto muito grande e usa um grande número de pacotes, terá mais problemas, mas uma cadeia de erros no console já o ajudará a resolvê-los e iniciar o projeto no modo adequado. Este guia descreve os principais erros e métodos para resolvê-los relevantes para todos os projetos com o Django 1.9 (alguns pontos não são relevantes para o Django versão 1.11) e ajudará a transferir o projeto para o Django 2.0 mais rapidamente, além de evitar perda desnecessária de tempo para analisar e pesquisar soluções para erros comuns.

Source: https://habr.com/ru/post/pt417837/


All Articles