जहां वास्तव में अजगर व्यापार तर्क को django में रखा जाना चाहिए


26

मैंने अभी-अभी Django / Python / Web Development सीखना शुरू किया है। यह समस्या मुझे पिछले कुछ समय से परेशान कर रही है।

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

मैं एक के बाद एक पायथन फ़ाइलों को कॉल करने वाले स्टैंडअलोन पायथन डेस्कटॉप एप्लिकेशन में सफलतापूर्वक यह सभी कार्य करने में सक्षम रहा हूं। हालाँकि, अब मैं इसे एक वेब अनुप्रयोग बनाना चाहता हूँ, जिसे मैंने Django ढांचे का उपयोग करना शुरू कर दिया है।

मैंने बहुत खोज की है लेकिन मैं अभी भी यह पता लगाने में सक्षम नहीं हूं कि वास्तव में मुझे इस पायथन फाइल को कहां रखना चाहिए जिसमें सभी तर्क हैं। क्या मुझे एक और क्लास आधारित फ़ाइल चाहिए (logic.py)और उसमें से कॉल करना चाहिए view.py? मैंने गुगली की और पाया कि बहुत से डेवलपर्स अपने व्यावसायिक तर्क को Django में अपने मॉडल-थ्रेड में रख रहे हैं। हालांकि, मुझे लगता है कि यह सहज रूप से सही नहीं है क्योंकि मॉडल को विशेष रूप से बैक एंड के साथ संवाद करना चाहिए। किसी भी मदद की सराहना की जाएगी। अग्रिम धन्यवाद।



एक लेख मिला, जो इस विषय पर बड़े पैमाने पर चर्चा करता है (पिरामिड को ध्यान में रखते हुए, django नहीं)। कुछ समझदार thaughts है: nando.oui.com.br/2014/04/01/…
kratenko

जवाबों:


16

मैंने बहुत खोज की है लेकिन मैं अभी भी यह पता लगाने में सक्षम नहीं हूं कि वास्तव में मुझे इस पायथन फाइल को कहां रखना चाहिए जिसमें सभी तर्क हैं।

आपकी आवश्यकताओं के आधार पर कई विकल्प हैं:

  1. Imageमॉडल को उदाहरण के लिए तर्क जोड़ें । यह एक उपयोगी विकल्प है यदि आपको डेटाबेस में प्रति-छवि मेटा डेटा संग्रहीत करने की आवश्यकता है, और प्रत्येक मॉडल उदाहरण (प्रत्येक छवि) अपने आप से संसाधित होता है।

  2. लॉजिक को प्लेन पायथन Imageक्लास के रूप में जोड़ें , जैसे एक फ़ाइल में image.py। Django में कुछ भी आपको viewsया modelsमॉड्यूल में इसके अलावा तर्क जोड़ने से रोकता है । यह एक अच्छा विकल्प है अगर छवि तर्क आपके Django ऐप (जैसे एक इमेज प्रोसेसिंग ऐप) का एक केंद्रीय घटक है।

  3. एक अलग पायथन प्रोजेक्ट बनाएं जो तर्क प्रदान करता है, फिर इसे अपने विचारों से कॉल करें। इस परियोजना को अपने Django ऐप के पायथन वातावरण में स्थापित करना सुनिश्चित करें। यह विकल्प मान्य है यदि आपका Django ऐप का उद्देश्य छवियों को अपलोड करना और देखना है, या किसी उपयोगकर्ता के अनुरोध पर सीधे प्रतिक्रिया में छवि प्रसंस्करण के परिणाम दिखाना है, लेकिन जहां छवि प्रसंस्करण का उपयोग अन्य परियोजनाओं द्वारा भी किया जा सकता है।

  4. एक अलग ऐप बनाएं जो एसिंक्रोनस रूप से अनुरोधों को संसाधित करता है और आपके Django ऐप से अलग से चलाया जाता है। यह विकल्प उपयोगी है यदि आपको एप्लिकेशन के अनुरोध चक्र से छवि प्रसंस्करण को कम करने की आवश्यकता है, बड़ी संख्या में छवियों को संसाधित करें, या जहां प्रत्येक गणना को अनुरोध चक्र के समय के भीतर हल करने में बहुत अधिक समय लगता है (अधिकतम 500ms से 1s के भीतर) ।

मुझे लगता है कि यह सहज रूप से सही नहीं है क्योंकि मॉडल को विशेष रूप से बैक एंड के साथ संवाद करना चाहिए।

Django में कुछ भी नहीं है जिसके लिए बैक एंड के साथ संचार करने के लिए एक मॉडल या डेटाबेस की आवश्यकता होती है। मुझे लगता है कि आप Django आम तौर पर एक मॉडल (अर्थात्, डेटाबेस में एक या कई तालिकाओं के एक अमूर्त) पर विचार कर रहे हैं, शब्द मॉडल को एक डिजाइन निर्माण (जैसे डोमेन ड्रिवेन डिज़ाइन में) के रूप में मिलाते हैं।


धन्यवाद! यह वास्तव में बहुत ही सुखद था। मुझे लगता है कि विकल्प नंबर 3 मेरे लिए काफी अच्छा होना चाहिए। :)
adrita

उत्तर को नकारात्मक रूप से रेट करना ठीक है, लेकिन कृपया एक टिप्पणी जोड़ें ताकि मैं इसे बेहतर बना
सकूं

5

डैनियल ग्रीनफेल्ड, "टू स्कोप्स ऑफ़ Django के सह-लेखक, की सलाह देते हैं कि व्यापार तर्क मॉडल में होना चाहिए" जब संभव हो, या यदि आवश्यक हो तो रूपों में। "बार्ट के संभावित डुप्लिकेट के लिए, django MVC के समान हो सकता है।" MVC नहीं। जैसा कि आधिकारिक django प्रलेखन faq में यहाँ बताया गया है @adrita, मुझे लगता है कि आपको मॉडल, विचार और टेम्पलेट्स की अवधारणा को समझने में मदद करने के लिए आधिकारिक दस्तावेज़ की समीक्षा करने की आवश्यकता हो सकती है।


आपके सुझाव के लिए धन्यवाद। निश्चित रूप से प्रलेखन के माध्यम से जाना होगा :)
adrita

खुशी है कि आपने इसे ठीक कर लिया, @miraculixx ने एक ठोस विवरण दिया। यदि आप fb पर हैं तो django python फ्रेमवर्क समूह में शामिल हों।
डिएक

2

आधिकारिक Django डॉक्स https://docs.djangoproject.com/en/1.11/ में , यह कहता है:

Django के पास "विचारों" की अवधारणा है जो उपयोगकर्ता के अनुरोध को संसाधित करने और प्रतिक्रिया को वापस करने के लिए जिम्मेदार तर्क को संलग्न करता है। नीचे दिए गए लिंक के माध्यम से विचारों के बारे में जानने की जरूरत है:

Django विचारों के भीतर निहित तर्क की सिफारिश करता है।


3
यह जरूरी नहीं कि व्यावसायिक तर्क के समान हो।
FirstLastname

1
मैं Django प्रलेखन की उस व्याख्या से सहमत नहीं हूं। Django के दस्तावेज़ में कहीं और (उदाहरण के लिए Model.clean()) यह थोड़ा और अधिक स्पष्ट रूप से निहित है (यदि हम मॉडल, टेम्पलेट और विचारों के लिए केवल एक वास्तविक दुनिया Django परियोजना है) - व्यावसायिक तर्क (या बहुत कम से कम, सत्यापन) का है मॉडल परत। ध्यान दें कि मैंने उस सरलीकरण में फॉर्म शामिल नहीं किए हैं, जो स्वीकार्य भी हैं।
केई आर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.