Django बनाम मॉडल देखें नियंत्रक [बंद]


110

क्या कोई मुझे समझा सकता है कि Django और मॉडल व्यू कंट्रोलर पैटर्न के बीच अंतर कहां हैं?

कार्यात्मक रूप से, हम उन अंतरों से क्या उम्मीद कर सकते हैं - यानी जोजो से तुलना करने पर अलग-अलग काम करता है, उदाहरण के लिए, रूबी ऑन रेल्स?


2
जब आप कहते हैं "मॉडल दृश्य नियंत्रक, क्या आप सामान्य पैटर्न, या एक विशिष्ट कार्यान्वयन का मतलब है (जैसे रूबी ऑन रेल्स)?
पॉल डी। वेट

33
यह प्रश्न 'रचनात्मक नहीं' के रूप में योग्य नहीं है और "बहस, तर्क, मतदान, या विस्तारित चर्चा" के बिना सीधे आगे का उत्तर है। फिर इसे बंद क्यों करें?
उपयोगकर्ता

6
रचनात्मक नहीं है? एसओ सुपर मॉड्स फिर से हड़ताल
अमित त्रिपाठी

4
आज तक, लगभग 24,000 लोगों ने इस प्रश्न को रचनात्मक पाया। मेरे सहित।
15

3
2017 तक, यह प्रश्न अभी भी रचनात्मक है
लियोनार्डो

जवाबों:


140

Django बुक के अनुसार , Django MVC पैटर्न को बारीकी से फॉलो करता है जिसे MVC फ्रेमवर्क कहा जाता है।

Django को MTV फ्रेमवर्क के रूप में संदर्भित किया गया है क्योंकि नियंत्रक को स्वयं फ़्रेमवर्क द्वारा नियंत्रित किया जाता है और अधिकांश उत्तेजना मॉडल, टेम्पलेट और विचारों में होती है।

आप एमटीवी / एमवीसी के बारे में अधिक यहाँ पढ़ सकते हैं:

एमटीवी (या एमवीसी) डेवलपमेंट पैटर्न

यदि आप अन्य MVC वेब-विकास रूपरेखाओं से परिचित हैं, जैसे कि रूबी ऑन रेल्स, तो आप Django के विचारों को नियंत्रक और Django टेम्पलेट्स को विचार मान सकते हैं

यह एमवीसी की अलग-अलग व्याख्याओं द्वारा लाया गया एक दुर्भाग्यपूर्ण भ्रम है।

एमवीसी के Django की व्याख्या में, दृश्य उपयोगकर्ता को प्रस्तुत किए जाने वाले डेटा का वर्णन करता है; यह जरूरी नहीं है कि डेटा कैसे दिखता है, बल्कि कौन सा डेटा प्रस्तुत किया गया है।

इसके विपरीत, रूबी ऑन रेल्स और इसी तरह के ढांचे का सुझाव है कि नियंत्रक की नौकरी में यह तय करना शामिल है कि कौन सा डेटा उपयोगकर्ता को प्रस्तुत किया जाता है, जबकि दृश्य कड़ाई से है कि डेटा कैसा दिखता है, कौन सा डेटा प्रस्तुत नहीं किया गया है।


6
महान जवाब के लिए धन्यवाद। रेल से Django के लिए आ रहा है, यह उन चीजों में से एक का जवाब देता है जो मुझे सबसे ज्यादा निराशाजनक लगीं: django ने एक कोड नियंत्रक को एक फाइल में क्यों डाला है जिसे view.py कहा जाता है !?
dgmdan

@dgmdan यह सिर्फ एक डिफ़ॉल्ट सम्मेलन है, आप जो नाम पसंद करते हैं उसे चुन सकते हैं। लेकिन मैं सहमत हूं, यह अजीब लगता है :)
पाओलो मोरेटी

1
मैं एक दृश्य परत के रूप में view.py को छोड़ दूंगा और Django के भ्रम से बचने के लिए एक नियंत्रक पैकेज में नियंत्रक कक्षाओं का एक सेट बनाऊंगा।
stanleyxu2005

5
@dgmda: एक "कंट्रोलर" की अवधारणा बनना वेबएप्स में एक मिथ्या नाम है। MVC एक इवेंट संचालित फ्रेमवर्क है जो केवल HTTP के स्टेटलेस REQUEST / RESPONSE मॉडल में फिट नहीं होता है। इसे पहले स्थान पर MVC नहीं कहा जाना चाहिए। लगभग सभी वेबएप MVC नहीं हैं, लेकिन एक मॉडल और एक फ़ंक्शन या वर्ग का उपयोग करता है जिसे आमतौर पर एक दृश्य कहा जाता है। बदले में HTML टेम्पलेट को HTML रेंडरिंग सौंप सकता है, लेकिन इसकी आवश्यकता नहीं है। तो वास्तव में एक नियंत्रक नहीं है।
लेनार्ट रेगेब्र

2
मैं Lennart Regebro की अवधारणा को वापस लेता हूं कि HTTP जैसे स्टेटलेस मॉडल में कंट्रोलर नहीं होना चाहिए और वेबएप्स के लिए MVC मॉडल सिर्फ एक बड़ा भ्रम पैदा करता है
Hussam

23

Django FAQ अपने आप में एक आरंभिक स्थान है:

एमवीसी की हमारी व्याख्या में, "दृश्य" उस डेटा का वर्णन करता है जो उपयोगकर्ता को प्रस्तुत किया जाता है। यह जरूरी नहीं है कि डेटा कैसा दिखता है, लेकिन कौन सा डेटा प्रस्तुत किया गया है। दृश्य बताता है कि आप कौन सा डेटा देखते हैं, न कि आप इसे कैसे देखते हैं। यह एक सूक्ष्म अंतर है।

...

इसके अलावा, यह प्रस्तुति से सामग्री को अलग करने के लिए समझदार है - जो कि टेम्पलेट्स में आते हैं। Django में, "दृश्य" वर्णन करता है कि कौन सा डेटा प्रस्तुत किया गया है, लेकिन एक दृश्य सामान्य रूप से एक टेम्पलेट को दर्शाता है, जो बताता है कि डेटा कैसे प्रस्तुत किया गया है।

"नियंत्रक" कहाँ फिट बैठता है? Django के मामले में, शायद यह ढांचा ही है: जो मशीनरी Django URL कॉन्फ़िगरेशन के अनुसार उपयुक्त दृश्य के लिए अनुरोध भेजती है।

यदि आप समरूपता के लिए भूखे हैं, तो आप कह सकते हैं कि Django एक "MTV" ढांचा है - अर्थात, "मॉडल", "टेम्पलेट", और "दृश्य"। यह टूटना बहुत अधिक समझ में आता है।

ध्यान रखें कि "मॉडल व्यू कंट्रोलर" केवल एक पैटर्न है, अर्थात एक सामान्य वास्तुकला का वर्णन करने का प्रयास। तो एक बेहतर सवाल यह हो सकता है कि "Django मॉडल व्यू कंट्रोलर पैटर्न को कितनी अच्छी तरह फिट करता है?"


3
यह शायद सबसे सीधा जवाब है।
उपयोगकर्ता

11

जब आप कोड करते हैं, तो फ्रेम के टुकड़ों के नाम के बारे में नहीं सोचते हैं, उदाहरण के लिए, RoR में कोई susbtantive अंतर नहीं हैं। लेकिन यह आपके द्वारा दिए गए उपयोग पर निर्भर करता है models, क्योंकि Django पर वे आसानी से कुछ तर्क रखते हैं जो अन्य रूपरेखाओं पर नियंत्रक स्तर पर रहेंगे।

viewDjango पर डेटा प्राप्त करने के लिए क्वेरी के एक सेट हो, और उन्हें टेम्पलेट को पारित करने के लिए जाता है।


10
एक viewsDjango में एक की तरह कुछ है controllerMVC में और एक templateDjango में अधिक होने की संभावना एक हैviews
रोएल

7

Mvt में, URL के लिए एक अनुरोध एक दृश्य में भेजा जाता है। यह दृश्य मॉडल में कॉल करता है, जोड़तोड़ करता है और आउटपुट के लिए डेटा तैयार करता है। डेटा एक टेम्प्लेट को पास किया जाता है जिसे एक प्रतिक्रिया के रूप में उत्सर्जित किया जाता है। आदर्श रूप से वेब फ्रेमवर्क में, कंट्रोलर व्यू से छिपा होता है।

यह वह जगह है जहां एमवीसी से अंतर होता है: एमवीसी में, उपयोगकर्ता गुई के साथ बातचीत करता है, नियंत्रक अनुरोध को संभालता है और मॉडल को देखता है और उपयोगकर्ता को परिणाम देखने के लिए मॉडल से पूछताछ करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.