Django ialah rangka kerja web yang ditulis dalam Python Ciri utamanya ialah pembangunan pantas, pengembangan mudah, kebolehgunaan semula yang tinggi, dsb. Sejak pelancaran pertamanya pada tahun 2005, Django telah berkembang menjadi rangka kerja pembangunan web yang berkuasa.
Semakin masa berlalu, versi Django sentiasa dikemas kini. Artikel ini akan memberikan pemahaman yang mendalam tentang evolusi versi Django, perubahan daripada 1.x kepada 3.x, memperkenalkan ciri baharu, penambahbaikan dan perubahan yang memerlukan perhatian serta memberikan contoh kod terperinci.
Versi Django 1.x ialah versi awal Django, termasuk dari 1.0.1 hingga 1.11.29. Dalam versi ini, Django sudah mempunyai banyak fungsi asas, seperti:
a Menggunakan ORM untuk operasi pangkalan data
ORM ialah komponen teras Django. Ia membolehkan pembangun menggunakan kod Python untuk mengendalikan pangkalan data tanpa terus menggunakan pernyataan SQL. ORM menjadikan operasi lebih mudah dan lebih intuitif. Contoh mudah:
from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() class Author(models.Model): name = models.CharField(max_length=50) email = models.EmailField() class Entry(models.Model): blog = models.ForeignKey(Blog, on_delete=models.CASCADE) headline = models.CharField(max_length=255) body_text = models.TextField() pub_date = models.DateTimeField() mod_date = models.DateTimeField() authors = models.ManyToManyField(Author) n_comments = models.IntegerField() n_pingbacks = models.IntegerField() rating = models.IntegerField()
Dalam contoh di atas, kami menentukan tiga model data, Blog, Pengarang dan Entri, yang semuanya diwarisi daripada model.Model. Atribut kelas ini sepadan dengan medan dalam jadual pangkalan data Contohnya, kelas Blog mempunyai dua medan: nama dan slogan, yang digunakan untuk menyimpan nama blog jenis rentetan dan slogan. Semasa mentakrifkan model data, Django akan menjana jadual pangkalan data yang sepadan secara automatik, menambah, memadam, mengubah suai dan operasi pertanyaan serta ORM API.
b. Urus URL secara automatik
Dalam versi Django 1.x, kami hanya perlu menulis fungsi paparan untuk mengendalikan permintaan HTTP, dan tidak perlu mengurus URL sendiri secara manual. Django secara automatik akan memetakan permintaan kepada fungsi paparan yang sepadan berdasarkan penghalaan URL yang dikonfigurasikan. Contohnya:
from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'), url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'), url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'), ]
Dalam contoh di atas, kami menentukan empat laluan URL, termasuk halaman utama, halaman butiran soalan, halaman keputusan undian dan halaman fungsi pengundian. Untuk setiap laluan URL, kami menentukan fungsi pemprosesan yang sepadan. Django secara automatik akan memadankan URL yang diminta dengan laluan, dengan itu merealisasikan fungsi mengurus URL secara automatik.
c. Sistem pengurusan latar belakang pentadbir terbina dalam
Sistem pengurusan latar belakang pentadbir Django ialah fungsi yang sangat berkuasa. Melalui sistem pengurusan latar belakang ini, kita boleh menambah, memadam, mengubah dan menyemak pangkalan data dengan mudah. Sistem pengurusan latar belakang pentadbir dalam versi Django 1.x sudah mempunyai banyak fungsi asas, seperti menjana tapak pentadbir secara automatik, mengurus model data, memaparkan senarai tersuai, penapis dan borang, dsb.
Versi Django 2.x termasuk daripada 2.0.0 hingga 2.2.24, yang membawa beberapa peningkatan besar kepada Django.
a. Memperkenalkan ASGI
Dalam versi Django 2.x, protokol ASGI (Asynchronous Server Gateway Interface) telah diperkenalkan. ASGI ialah protokol yang direka untuk pelayan web tak segerak, yang membolehkan pembangun menulis aplikasi web tak segerak. Dengan cara ini, kami dapat memenuhi keperluan pengaturcaraan tak segerak, seperti soket web, komunikasi masa nyata, tugas yang memakan masa, dsb.
async def application(scope, receive, send): assert scope['type'] == 'http' await send({ 'type': 'http.response.start', 'status': 200, 'headers': [ [b'content-type', b'text/plain'], ] }) await send({ 'type': 'http.response.body', 'body': b'Hello, world!', })
Contoh kod di atas menggunakan ASGI untuk menulis aplikasi web mudah. Pertama, tentukan fungsi tak segerak aplikasi, yang menerima tiga parameter: skop, terima dan hantar. Parameter ini ditetapkan dan dipersetujui oleh protokol ASGI. Antaranya, skop mewakili konteks permintaan, termasuk jenis permintaan, laluan, rentetan pertanyaan, dsb. terima mewakili kaedah menerima permintaan, membina kamus untuk mewakili pengepala permintaan, kod respons, dll.; mengembalikan respons kepada klien.
b. Keserasian Python 2.x yang dialih keluar
Dalam versi Django 2.x, keserasian Python 2.x telah dialih keluar dan versi pustaka pihak ketiga Python 2.x tidak lagi disokong. Ini bermakna pembangun perlu menggunakan Python 3.x untuk membangunkan aplikasi Django.
Selain itu, versi Django 2.x juga mempunyai beberapa penambahbaikan dan pengoptimuman lain, seperti:
Versi Django 3.x ialah versi terkini pada masa ini, termasuk dari 3.0.0 hingga 3.2.5. Ia meningkatkan lagi fungsi dan prestasinya berdasarkan versi 2.x.
a. Parameter laluan sokongan
Dalam versi Django 3.x, Penukar Laluan, iaitu sokongan untuk parameter laluan, telah diperkenalkan. Ciri baharu ini sangat berguna untuk membangunkan API RESTful dan boleh menyediakan kaedah pemadanan yang lebih fleksibel untuk URL.
from django.urls import path def greet(request, name): return HttpResponse(f'Hello, {name}!') urlpatterns = [ path('greet/<name>/', greet), ... ]
Dalam contoh di atas, kami menentukan nama parameter laluan. Sebarang nilai dalam laluan permintaan boleh diisikan ke dalam parameter nama dan diwakili sedemikian semasa memproses paparan.
b. Penggantian UnicodeSlugify
Dalam versi Django 3.x, UnicodeSlugify tidak lagi digunakan untuk menggantikan Slugify lalainya. UnicodeSlugify ialah perpustakaan pihak ketiga yang membolehkan pembangun bekerja dengan lebih banyak bahasa dan set aksara. Daripada UnicodeSlugify, algoritma Slugify baharu telah direka untuk Django yang lebih piawai, lebih setempat, lebih komprehensif, lebih berskala dan lebih selamat.
c. Optimumkan pertanyaan pangkalan data
Dalam versi Django 3.x, kaedah pertanyaan pangkalan data dioptimumkan lagi. Contohnya, apabila aplikasi bermula, Django menyimpan metadata untuk semua pertanyaan pangkalan data. Ini boleh mengurangkan bilangan carian struktur jadual dan meningkatkan kelajuan tindak balas aplikasi.
Selain itu, versi Django 3.x juga menambahkan banyak ciri dan penambahbaikan baharu yang lain, seperti:
Artikel ini menerangkan secara ringkas perubahan dalam evolusi daripada Django 1.x kepada Django 3.x. Perubahan ini membawa prestasi yang lebih baik, kecekapan pembangunan yang lebih baik dan kemudahan penggunaan yang lebih baik. Sebagai rangka kerja MVC, saya percaya Django akan menjadi lebih dan lebih sempurna.
Atas ialah kandungan terperinci Evolusi versi Django: dari 1.x hingga 3.x, ketahui tentang ciri dan peningkatan baharu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!