Seperti yang kita semua tahu, django menggunakan MVT (model-view-template) untuk reka bentuknya dalam membangunkan aplikasi web.
View sendiri ialah boleh panggil yang mengambil permintaan dan mengembalikan respons. ia lebih daripada sekadar fungsi kerana Django menyediakan sesuatu yang dipanggil Paparan Berasaskan Kelas, jadi pembangun boleh menulis paparan menggunakan, dengan baik, pendekatan berasaskan kelas atau anda boleh menyebut pendekatan OOP. Paparan Berasaskan Kelas ini direka bentuk supaya kita boleh menstrukturkan pandangan kita dan boleh digunakan semula dengan kuasa pewarisan dan campuran.
Seperti yang didokumenkan dengan baik dalam dokumen django, salah satu masalah dengan paparan berasaskan fungsi ialah tiada cara untuk melanjutkan atau menyesuaikannya di luar beberapa pilihan konfigurasi, mengehadkan kegunaannya dalam banyak aplikasi dunia nyata.
Kit alatan kelas asas dan campuran dalam django direka untuk fleksibiliti maksimum. Mari lihat bagaimana kita boleh menggunakan Paparan Berdasarkan Kelas yang paling asas dalam django menggunakan warisan kelas Lihat dan bandingkannya dengan paparan berdasarkan fungsi.
#views.py using View class inheritance from django.views import View from django.http import HttpResponse, HttpRequest class IndexView(View): def get(self, request: HttpRequest): # imagine 10 line of view logic here return HttpResponse("Hello world from indexview") def post(self, request: HttpRequest): # imagine 10 line of view logic here return HttpResponse("Hello world from indexview in post method")
#views.py function based view from django.http import HttpResponse, HttpRequest def index(request: HttpRequest): if request.method == "GET": # imagine 10 line of view logic here return HttpResponse("Hello world from index funcion view") elif request.method == "POST": # imagine 10 line of view logic here return HttpResponse("Hello world from index funcion view in post method")
Jika anda melihat di atas, paparan berasaskan kelas membolehkan anda bertindak balas kepada kaedah permintaan HTTP yang berbeza dengan kaedah contoh kelas yang berbeza, bukannya dengan kod bercabang bersyarat di dalam satu fungsi paparan. sekarang bayangkan dalam setiap paparan di atas bahawa kami menambah 10 baris logik setiap kaedah, anda sepatutnya boleh mengetahui yang mana satu lebih mudah untuk dilalui.
Untuk mendaftarkan pandangan berasaskan kelas ke dalam konfigurasi url ialah kita mesti memanggil kaedah kelas as_view() yang pada asasnya akan menukar Paparan Kelas kepada fungsi boleh panggil. fungsi yang ditukar ini akan memanggil setup() untuk memulakan atributnya dan kemudian memanggil dispatch() untuk menyemak kaedah yang digunakan oleh pengguna (GET, POST, atau kaedah lain) dan akan menyambungkan kaedah permintaan kepada kaedah pemadanan coressponding yang terdapat pada pandangan berasaskan kelas pada asalnya
#urls.py from django.urls import path from myapp.views import IndexView, index urlpatterns = [ path("", IndexView.as_view(), name=IndexView.__name__), path("index/", index, name=index.__name__), ]
pandangan berasaskan kelas juga menyokong semua http shourtcut yang dimiliki Django, seperti fungsi render() untuk memberikan templat, berikut ialah contoh diubah suai bagi django cbv menggunakan pintasan render dan bekerjasama dengan rangka kerja mesej django
class IndexView(View): def get(self, request: HttpRequest): # imagine 10 line of view logic here return render(request, "GEtindex.html") def post(self, request: HttpRequest): # imagine 10 line of view logic here messages.add_message(request, messages.INFO, "POST Success") #add display success message here by django messages framework return render(request, "POSTindex.html")
Keseluruhan paparan berasaskan kelas django membolehkan pembangun menulis dengan lebih baik untuk memahami logik paparan, semakin kompleks logik paparan, saya pasti ia akan menjadi lebih sukar untuk dibaca jika kita hanya menggunakan paparan berdasarkan fungsi (terlalu banyak pernyataan jika untuk menyemak apa kaedah digunakan oleh pengguna sebagai contoh) dan sukar untuk skala, sementara itu django cbv direka untuk memecahkan logik pandangan kami kepada pelbagai kaedah seperti kaedah dapatkan dan pos. dan boleh digunakan semula dalam warisan jika anda mahu, walaupun saya boleh berpendapat bahawa semakin banyak warisan yang kita ada dalam kelas, ia akan menjadi lebih sukar untuk dibaca kerana abstraksinya.
anda boleh menyemak lebih lanjut tentang paparan berasaskan kelas dalam dokumen django bermula dari sini, sini, sini
Juga dokumen alternatif yang baik yang memfokuskan dalam paparan berasaskan kelas django ialah ccbv.co.uk <- saya menggunakan tapak web ini untuk mengetahui logik templat paparan yang boleh saya gunakan dengan pantas!
Atas ialah kandungan terperinci Pandangan Berdasarkan Kelas Django menjadi mudah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!