Django

2012-10-19 7 views
16

के साथ आईओएस ऐप तो वर्तमान में हमारे पास एक वेबसाइट है जो Django का उपयोग करके बनाई गई थी। अब, हम एक मूल आईओएस ऐप बनाना चाहते हैं जो समान बैकएंड का उपयोग करता है, इसलिए हमें पूरी चीज़ को फिर से कोड करने की आवश्यकता नहीं है। मेरी समझ से, दो वैकल्पिक मार्ग हैं:Django

1) सीधे Django यूआरएल को कॉल करें, जो तब एक फ़ंक्शन कॉल करता है। उस फ़ंक्शन के भीतर, एन्कोडेड JSON डेटा के साथ HTTPResponse बनाएं और उसे वापस भेजें।

2) Django सर्वर से TUSTpie की तरह कुछ आरईएसटी सेवा बनाएं। हालांकि, एक ऑब्जेक्ट पर सीधी-आगे जीईटी कॉल करने के अलावा, मैं नहीं देखता कि हम अपने Django मॉडल में TastyPie से कस्टम फ़ंक्शंस कैसे कॉल कर सकते हैं। क्या हम यह भी कर सकते हैं?

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

बहुत बहुत धन्यवाद!

उत्तर

8

मैं वर्तमान में बैकएंड में Django/Tastypie के साथ आईफोन के लिए आईओएस ऐप पर काम कर रहा हूं। हम 1 और 2 दोनों करते हैं। संसाधनों को टेस्टपी के माध्यम से रीस्ट-स्टाइल (ऑथ के बाद) की पेशकश की जाती है, और किसी भी कस्टम फ़ंक्शन कॉल (उदाहरण के लिए, एक नया उपयोगकर्ता बनाना) को विभिन्न आरईएसटी एंडपॉइंट्स पर views.py द्वारा प्रबंधित किया जाता है, जो जेएसओएन देता है।

+1

प्रदर्शन कैसा प्रदर्शन है? और यह भी ... यदि आप अभी भी इसका उपयोग कर रहे हैं तो आप विकल्प 1 के साथ क्यों नहीं गए थे ?! एक बार फिर धन्यवाद! – abisson

+1

मैं @ सैम्पसन-चेन से सहमत हूं, हम वही कर रहे हैं। हमारे पास tastypie के साथ एक आरईएसटी इंटरफेस है, और अन्य तरीकों कस्टम आरपीसी सेवाओं के साथ किया जाता है। – clopez

+1

क्या आप समझा सकते हैं कि कस्टम आरपीसी सेवाएं कैसे काम करती हैं? मैं कुछ इसी तरह काम कर रहा हूं और प्रमाणीकरण और पुन: प्रयोज्यता के संदर्भ में कुछ मानकों का पालन करना चाहता हूं। – Mutant

4

जब आप पहिया को पुनर्निर्मित करने के बजाय कुछ करने का एक सामान्य तरीका उपयोग करने का प्रयास कर सकते हैं। यह देखते हुए कि, आरईएसटी वितरित सिस्टम के लिए सॉफ्टवेयर आर्किटेक्चर की एक मानक शैली है और जब आप संस्थाओं/वस्तुओं के साथ काम करते हैं तो यह बहुत अच्छी तरह से काम करता है।

यदि आपके पास एक एपीआई है जहां आप संस्थाओं के साथ बातचीत करते हैं, तो आरईएसटी इंटरफेस का उपयोग करने की अनुशंसा की जाती है। पायथन पर आपके पास Tastypie या नया Django Rest Framework है जो लगभग सभी काम करता है। जैसा कि आप 2)

यदि आपके पास एक एपीआई है जहां आप लॉगिन के साथ सेवाओं के साथ बातचीत करते हैं, तो आपको एक आरपीसी सेवा बनाना चाहिए, मूल रूप से रिमोट एक्सेस के साथ एक फ़ंक्शन जिसे आप 1 पर समझाते हैं)।

आम तौर पर आपको एक मजबूत आवेदन पर दोनों तरीकों की आवश्यकता होगी। और हाँ, ऐसा करना संभव है। मैं @ सैम्पसन-चेन से सहमत हूं, हम वही कर रहे हैं। हमारे पास tastypie के साथ एक आरईएसटी इंटरफेस है, और अन्य तरीकों कस्टम आरपीसी सेवाओं के साथ किया जाता है।

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

उम्मीद है कि यह मदद करता है।

0

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

  1. जारी करना एक मौजूदा संसाधन पर एक PUT/PATCH अनुरोध, एक झंडा देता है कि अपने बैकएंड कार्रवाई ट्रिगर करने के लिए कैसे पता की स्थापना: कुछ तरीके हैं जिन्हें मैं Django/tastypie के भीतर इस संभाल करने के लिए मिल गया है कर रहे हैं। यह पता लगाना कि क्या फ्लैग सेट किया गया था, पोस्ट_सेव सिग्नल हैंडलर के अंदर किया जा सकता है (डीजेंगो-मॉडल-यूटिल फ़ील्डट्रैकर का उपयोग यह देखने के लिए करें कि कोई फ़ील्ड गलत से सही में बदल गया है या नहीं); इससे यह सुनिश्चित करने में भी मदद मिलती है कि आपका एप्लिकेशन तर्क आपके आरईएसटी एपीआई (जैसे कि व्यवस्थापक साइट के माध्यम से परिवर्तन, एक सेलेरी कार्य, एक HTML आधारित दृश्य, या पायथन शेल) के बाहर काम करता है।

  2. गैर-ओआरएम संसाधन बनाएं (उदा।/ api/v1/ईमेल /) और post_list() विधि को ओवरराइड करें, अपने फ़ंक्शन को वहां कॉल करें।

  3. जैसा कि कहीं और बताया गया है, एक अधीनस्थ संसाधन (/ api/v1/myresource/send /) बनाएं।