खोज…


परिचय

सामान्य विचार वे विचार होते हैं जो एक निश्चित पूर्व-निर्धारित क्रिया करते हैं, जैसे वस्तुओं को बनाना, संपादित करना या हटाना, या केवल एक टेम्प्लेट दिखाना।

सामान्य विचारों को कार्यात्मक विचारों से अलग किया जाना चाहिए, जो आवश्यक कार्यों को करने के लिए हमेशा हाथ से लिखा जाता है। संक्षेप में, यह कहा जा सकता है कि सामान्य विचारों को कॉन्फ़िगर करने की आवश्यकता है, जबकि कार्यात्मक विचारों को प्रोग्राम करने की आवश्यकता है।

सामान्य विचार बहुत समय बचा सकते हैं, खासकर जब आपके पास प्रदर्शन करने के लिए कई मानकीकृत कार्य होते हैं।

टिप्पणियों

ये उदाहरण बताते हैं कि सामान्य विचार आमतौर पर मानकीकृत कार्यों को बहुत सरल बनाते हैं। खरोंच से सब कुछ प्रोग्रामिंग करने के बजाय, आप कॉन्फ़िगर करते हैं कि अन्य लोगों ने आपके लिए पहले से ही क्या प्रोग्राम किया है। यह कई स्थितियों में समझ में आता है, क्योंकि यह आपको पृष्ठभूमि में प्रक्रियाओं के बजाय अपनी परियोजनाओं के डिजाइन पर अधिक ध्यान केंद्रित करने की अनुमति देता है।

तो, क्या आपको हमेशा उनका उपयोग करना चाहिए? नहीं। वे केवल तब तक समझ में आते हैं जब तक आपके कार्य काफी मानकीकृत (लोड हो रहे हैं, संपादन, वस्तुओं को हटाना) और अधिक दोहराव वाले कार्य हैं। केवल एक बार एक विशिष्ट सामान्य दृश्य का उपयोग करना और फिर बहुत ही सहज कार्य करने के लिए उसके सभी तरीकों को ओवरराइड करना समझ में नहीं आता है। आप यहां एक कार्यात्मक दृश्य के साथ बेहतर हो सकते हैं।

हालांकि, यदि आपके पास बहुत सारे विचार हैं जिनकी इस कार्यक्षमता की आवश्यकता है या यदि आपके कार्य किसी विशिष्ट सामान्य दृश्य के परिभाषित कार्यों से मेल खाते हैं, तो सामान्य विचार वही हैं जो आपको अपने जीवन को सरल बनाने के लिए आवश्यक हैं।

न्यूनतम उदाहरण: कार्यात्मक बनाम सामान्य दृश्य

ऑब्जेक्ट बनाने के लिए एक कार्यात्मक दृश्य के लिए उदाहरण। टिप्पणियों और रिक्त लाइनों को छोड़कर, हमें कोड की 15 लाइनें चाहिए:

# imports
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect

from .models import SampleObject
from .forms import SampleObjectForm

# view functioon
def create_object(request):
    
    # when request method is 'GET', show the template
    if request.method == GET:
        # perform actions, such as loading a model form
        form = SampleObjectForm()
        return render_to_response('template.html', locals())
    
    # if request method is 'POST', create the object and redirect
    if request.method == POST:
        form = SampleObjectForm(request.POST)

        # save object and redirect to success page if form is valid
        if form.is_valid:
            form.save()
            return HttpResponseRedirect('url_to_redirect_to')

        # load template with form and show errors
        else:
            return render_to_response('template.html', locals())

एक ही कार्य करने के लिए 'क्लास-बेस्ड जेनरिक व्यू' के लिए उदाहरण। हमें एक ही कार्य को प्राप्त करने के लिए केवल 7 पंक्तियों की आवश्यकता है:

from django.views.generic import CreateView

from .models import SampleObject
from .forms import SampleObjectForm

class CreateObject(CreateView):
    model = SampleObject
    form_class = SampleObjectForm
    success_url = 'url_to_redirect_to'

सामान्य दृश्य अनुकूलित करना

उपरोक्त उदाहरण केवल तभी काम करता है जब आपके कार्य पूरी तरह से मानक कार्य हों। आप उदाहरण के लिए, यहां अतिरिक्त संदर्भ नहीं जोड़ते हैं।

आइए एक अधिक यथार्थवादी उदाहरण बनाएं। मान लें कि हम टेम्पलेट में एक पृष्ठ शीर्षक जोड़ना चाहते हैं। कार्यात्मक दृष्टिकोण में, यह इस तरह काम करेगा - सिर्फ एक अतिरिक्त लाइन के साथ:

def create_object(request):
    page_title = 'My Page Title'

    # ...

    return render_to_response('template.html', locals())

यह जेनेरिक विचारों के साथ हासिल करने के लिए अधिक कठिन (या: काउंटर-इंट्र्यूटिव) है। जैसा कि वे वर्ग-आधारित हैं, आपको वांछित परिणाम प्राप्त करने के लिए कक्षा की एक या कई विधि को ओवरराइड करने की आवश्यकता है। हमारे उदाहरण में, हमें कक्षा की get_context_data विधि को ओवरराइड करने की आवश्यकता है:

class CreateObject(CreateView):
    model = SampleObject
    form_class = SampleObjectForm
    success_url = 'url_to_redirect_to'

    def get_context_data(self, **kwargs):
        
        # Call class's get_context_data method to retrieve context
        context = super().get_context_data(**kwargs) 
        
        context['page_title'] = 'My page title'
        return context

यहां, हमें केवल एक के बजाय कोड के लिए चार अतिरिक्त लाइनों की आवश्यकता है - कम से कम पहले अतिरिक्त संदर्भ चर के लिए जिसे हम जोड़ना चाहते हैं।

मिक्स के साथ सामान्य दृश्य

जेनेरिक विचारों की असली शक्ति तब सामने आती है जब आप उन्हें मिक्सिंस के साथ जोड़ते हैं। एक मिश्रक आपके द्वारा परिभाषित एक और वर्ग है, जिसकी विधियाँ आपके दृश्य वर्ग द्वारा विरासत में प्राप्त की जा सकती हैं।

मान लें कि आप प्रत्येक दृश्य को टेम्पलेट में अतिरिक्त चर 'page_title' दिखाना चाहते हैं। हर बार जब आप दृश्य को परिभाषित करते हैं, तो get_context_data पद्धति को ओवरराइड करने के बजाय, आप इस विधि के साथ एक मिश्रण बनाते हैं और अपने विचारों को इस मिश्रण से विरासत में देते हैं। यह वास्तव में है की तुलना में अधिक जटिल लगता है:

# Your Mixin
class CustomMixin(object):
    
    def get_context_data(self, **kwargs):
        
        # Call class's get_context_data method to retrieve context
        context = super().get_context_data(**kwargs) 
        
        context['page_title'] = 'My page title'
        return context

# Your view function now inherits from the Mixin
class CreateObject(CustomMixin, CreateView):
    model = SampleObject
    form_class = SampleObjectForm
    success_url = 'url_to_redirect_to'

# As all other view functions which need these methods
class EditObject(CustomMixin, EditView):
    model = SampleObject
    # ...

इसका सौंदर्य यह है कि आपका कोड बहुत अधिक संरचित हो जाता है क्योंकि यह ज्यादातर कार्यात्मक विचारों के साथ होता है। विशिष्ट कार्यों के पीछे आपका पूरा तर्क केवल एक जगह और एक जगह बैठता है। इसके अलावा, आप समय की जबरदस्त बचत करेंगे, खासकर जब आपके पास कई विचार हैं जो हमेशा एक ही कार्य करते हैं, अलग-अलग वस्तुओं को छोड़कर



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow