जैसा कि हम सभी जानते हैं, django विकासशील वेब एप्लिकेशन पर अपने डिजाइन के लिए MVT (मॉडल-व्यू-टेम्पलेट) का उपयोग करता है।
व्यू स्वयं एक कॉल करने योग्य है जो अनुरोध लेता है और प्रतिक्रिया देता है। यह सिर्फ एक फ़ंक्शन से अधिक है क्योंकि Django क्लास आधारित व्यू नामक कुछ प्रदान करता है, इसलिए डेवलपर क्लास आधारित दृष्टिकोण या आप OOP दृष्टिकोण कह सकते हैं, का उपयोग करके एक दृश्य लिख सकते हैं। यह वर्ग आधारित दृश्य इसलिए डिज़ाइन किया गया है ताकि हम अपने विचारों को संरचित कर सकें और वंशानुक्रम और मिश्रण की शक्ति द्वारा इसका पुन: उपयोग किया जा सके।
जैसा कि django डॉक्स में अच्छी तरह से प्रलेखित है, फ़ंक्शन आधारित दृश्य के साथ एक समस्या यह है कि उन्हें कुछ कॉन्फ़िगरेशन विकल्पों से परे विस्तारित या अनुकूलित करने का कोई तरीका नहीं है, जिससे कई वास्तविक दुनिया के अनुप्रयोगों में उनकी उपयोगिता सीमित हो जाती है।
Django में बेस क्लास और मिक्सिन का टूलकिट अधिकतम लचीलेपन के लिए डिज़ाइन किया गया है। आइए देखें कि हम व्यू क्लास इनहेरिटेंस का उपयोग करके django में सबसे बुनियादी क्लास आधारित व्यू का उपयोग कैसे कर सकते हैं और इसकी तुलना फ़ंक्शन आधारित व्यू से कैसे कर सकते हैं।
#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")
यदि आप ऊपर देखते हैं, तो एक वर्ग-आधारित दृश्य आपको एकल दृश्य फ़ंक्शन के अंदर सशर्त रूप से शाखा कोड के बजाय, विभिन्न क्लास इंस्टेंस विधियों के साथ विभिन्न HTTP अनुरोध विधियों का जवाब देने की अनुमति देता है। अब उपरोक्त प्रत्येक दृश्य में कल्पना करें कि हमने प्रत्येक विधि में तर्क की 10 पंक्तियाँ जोड़ी हैं, आप बता सकते हैं कि कौन सा तरीका आसान है।
क्लास आधारित दृश्य को यूआरएल कॉन्फ़िगरेशन में पंजीकृत करने के लिए हमें as_view() क्लास विधि को कॉल करना होगा जो मूल रूप से क्लास व्यू को कॉल करने योग्य फ़ंक्शन में परिवर्तित कर देगा। यह परिवर्तित फ़ंक्शन अपनी विशेषता प्रारंभ करने के लिए सेटअप() को कॉल करेगा और फिर यह जांचने के लिए डिस्पैच() को कॉल करेगा कि उपयोगकर्ता के पास कौन सी विधि है (एक GET, POST, या अन्य विधि) और अनुरोध विधि को क्लास आधारित दृश्य के अनुरूप मिलान विधि से कनेक्ट करेगा।
#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__), ]
क्लास आधारित दृश्य सभी http शॉर्टकट django का भी समर्थन करता है, जैसे टेम्पलेट प्रस्तुत करने के लिए रेंडर() फ़ंक्शन, यहां रेंडर शॉर्टकट का उपयोग करके django सीबीवी का एक संशोधित उदाहरण है और 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")
कुल मिलाकर django क्लास आधारित व्यू डेवलपर को व्यू लॉजिक को समझने के लिए बेहतर लिखने की अनुमति देता है, व्यू लॉजिक जितना अधिक जटिल होता है, मुझे पूरा यकीन है कि अगर हम केवल फ़ंक्शन आधारित व्यू का उपयोग करते हैं तो इसे पढ़ना कठिन होगा (क्या जांचने के लिए बहुत सारे if स्टेटमेंट हैं) विधि उपयोगकर्ता एक उदाहरण के लिए उपयोग कर रहे हैं) और स्केल करना कठिन है, इस बीच django cbv को हमारे व्यू लॉजिक को गेट और पोस्ट विधि जैसी कई विधियों में तोड़ने के लिए डिज़ाइन किया गया है। और यदि आप चाहें तो इनहेरिटेंस में फिर से उपयोग किया जा सकता है, हालांकि मैं यह तर्क दे सकता हूं कि एक कक्षा में हमारे पास जितना अधिक इनहेरिटेंस होगा, उसके अमूर्त होने के कारण इसे पढ़ना कठिन होगा।
आप django डॉक्स में कक्षा आधारित दृश्य के बारे में अधिक जानकारी यहां, यहां, यहां से शुरू कर सकते हैं
इसके अलावा एक अच्छा वैकल्पिक दस्तावेज़ जो django वर्ग आधारित दृश्य पर ध्यान केंद्रित करता है वह ccbv.co.uk है
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3