Halo, hari ini saya ingin memberi tahu Anda tentang cara meningkatkan proyek dari versi 1.9 ke 2.0. Apa nuansa utama yang perlu dipertimbangkan dan ditulis ulang agar proyek dapat dimulai pada versi baru Django.
Langkah pertama
Ini adalah pembaruan Django ke versi 2.0, serta pembaruan dari semua paket terkait Anda yang digunakan dalam proyek, seperti Saya menggunakan lingkungan virtual dan requirement.txt, maka bagi saya ini adalah satu cara, bagi Anda mungkin berbeda.
Setelah Anda memperbarui semua paket, Anda tidak boleh memulai proyek, itu tidak akan memulai, jadi segera mulai untuk memperbaiki semua poin utama agar proyek dapat dimulai.
Langkah kedua. Memperbarui semua urls.py proyek Anda
Di urls.py utama Anda, tempat Anda memasukkan url dari aplikasi lain, kami terhubung:
dari django.urls import re_path, path.
Dan kami mengubah url ke path, serta menghapus ekspresi reguler dalam koneksi ini.
url(r'^ some/', include('some.urls')),
Jika Anda menggunakan tampilan langsung dari aplikasi ini, yang membutuhkan pelanggan tetap, maka kami menggunakan:
re_path(r'^app/$', App.as_view(), name='app')
Dalam aplikasi plug-in (misalnya, some / urls.py), dalam file urls.py, kami menggunakan:
re_path(r'^create/$', Create.as_view(), name='create')
Jika Anda menggunakan namespace dalam url selama inklusi, hapus dari sana dan transfer langsung ke aplikasi yang terhubung. Kami pergi ke urls.py dari aplikasi ini dan menulisnya di atas urlpatterns = []
app_name = 'app-application'
Baris ini bertindak sebagai pengganti namespace dan dirancang untuk membuat urls.py utama lebih bersih dan mudah dibaca, serta untuk kemudahan mengubah nama di satu tempat.
Langkah ketiga
Kami menggunakan pencarian di seluruh proyek, tergantung pada editor kode Anda yang Anda gunakan selama pengembangan, ini bisa hotkey yang berbeda, saya pikir Anda tahu mereka, jadi saya tidak akan berhenti di sini.
Kami berkendara di:
is_authenticated()
Dan ubah ke
is_authenticated
. Sekarang ini bukan metode, tetapi properti. Kesalahan ini akan menimbulkan pengecualian.
Lebih lanjut dalam proyek ini kami mencari:
from django.core.urlresolvers import reverse
Dan ubah ke:
from django.urls import reverse
Langkah keempat
Sekarang di semua model. Sebelumnya, harus ada argumen posisi wajib "on_delete" misalnya:
on_delete=models.CASCADE on_delete=models.DO_NOTHING on_delete=models.SET_NULL
Selanjutnya kita lakukan:
python manage.py makemigrations python manage.py migrate
Langkah kelima
Jika Anda mencoba untuk memulai proyek, maka itu seharusnya sudah mulai, tetapi segera itu akan memberi Anda kesalahan segera setelah Anda pergi ke 127.0.0.1:8000.
Kesalahannya adalah sebagai berikut:
AttributeError at / 'WSGIRequest' object has no attribute 'user'
Karena Anda perlu mengganti nama MIDDLEWARE_CLASSES menjadi MIDDLEWARE
Selanjutnya, Anda akan mendapatkan kesalahan berikut di konsol:
django.core.exceptions.ImproperlyConfigured: WSGI application 'application' could not be loaded; Error importing module: 'application doesn't look like a module path
Kesalahan ini terjadi karena Anda memiliki middleware lama, dan Anda harus memperbaruinya ke:
'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'
Langkah keenam
Jika Anda menggunakan middleware Anda sendiri dalam proyek, maka middleware Anda harus diwarisi dari MiddlewareMixin, dan bukan dari objek (Anda juga dapat menggunakan objek, tetapi kemudian Anda harus mendaftarkan metode tambahan yang diperlukan).
Impor:
from django.utils.deprecation import MiddlewareMixin
Itu saja! :)
Tentu saja, jika Anda memiliki proyek yang sangat besar dan Anda menggunakan sejumlah besar paket, maka Anda akan memiliki lebih banyak masalah, tetapi sudah ada rantai kesalahan di konsol yang akan membantu Anda menyelesaikannya dan memulai proyek dalam mode yang tepat. Panduan ini menjelaskan kesalahan utama dan cara untuk menyelesaikannya, yang relevan untuk semua proyek dengan Django 1.9 (beberapa poin tidak relevan untuk Django versi 1.11), dan akan membantu untuk dengan cepat mentransfer proyek ke Django 2.0, serta menghindari hilangnya waktu yang tidak perlu untuk penguraian dan pencarian solusi untuk kesalahan umum.