2013-04-29 9 views
17

मैं Django के साथ AngularJS जैसे क्लाइंट-साइड फ्रेमवर्क को संयोजित करने के लिए अपने सिर को लपेटने की कोशिश कर रहा हूं। एक चीज जो वास्तव में मुझे भ्रमित कर रही है वह मार्गों और आरईएसटी का मुद्दा है।Django, REST और कोणीय मार्ग

मैं इसके बारे में बहुत कुछ पढ़ने की कोशिश कर रहा हूं, लेकिन दस्तावेज सीमित है, खासकर Django को कोणीय (यहां छोटे स्निपेट्स) के साथ जोड़ा जा रहा है। मैं समझता हूं कि अंगुलर को प्लग इन करने और संसाधनों को पकड़ने के लिए मुझे अपने ऐप में एक मजबूत रीस्ट इंटरफ़ेस बनाने के लिए TastyPie जैसे एक आरईएसटी फ्रेमवर्क को जोड़ने की आवश्यकता है।

हालांकि, मैं इस तरह से अपने मार्गों को सही तरीके से मानचित्रित करने के तरीके के बारे में उलझन में हूं कि (1) मेरा सर्वर-साइड ऐप मेरे सिंगल-पेज ऐप (एसपीए) को कोणीय प्लग इन (2) मार्गों के साथ प्रस्तुत कर सकता है जो सूचना/लोड टेम्पलेट्स (कोणीय) लोड करने और सर्वर से डेटा पुनर्प्राप्त करने के लिए माना जाता है (django) संघर्ष नहीं करते हैं। जैसे कि मेरे पास कोई मेरी वेबसाइट पर जा रहा है और site.com/user/1234 कर रहा है - वह मार्ग कोणीय मार्ग और Django मार्ग दोनों से जुड़ा हुआ है - सिवाय इसके कि एक टेम्पलेट प्रस्तुत करता है और अन्य जेएसओएन से प्राप्त होता है जो कि पुनः प्राप्त किया जाता है डीबी/सर्वर।

इसके अलावा, आरईएसटी एपीआई का उपयोग करके, क्या मैं मॉडल मॉडल को मेरे मॉडल आदि के साथ सिंक्रनाइज़ करने के मामले में बहुत सारे फायदे से पूर्ववत करता हूं? AngularJS के साथ इसे बनाए रखने का कोई तरीका है या क्या मुझे एंगुलरजेएस विकल्प की ओर देखना है।

उत्तर

20

प्रश्न वास्तव में Django के लिए विशिष्ट नहीं है - केवल एसपीए में बैक एंड एंड फ्रंट एंड के बीच संबंधों को समझने की बात है।

मार्ग बैक एंड और फ्रंट एंड के बीच डुप्लीकेट नहीं किए गए हैं। आपका Django मार्गों की तरह स्थापित किया जाना चाहिए:

/api/foo 
/api/bar 
... 

और एक एकल मार्ग है कि एक एकल पृष्ठ HTML partials, उदा का पूरा उद्धार

/ 

बाकी मार्गों को कोणीय में परिभाषित किया जाएगा, उदा।

/articles/234 
/blog/date/slug 
... 

कोणीय नियंत्रकों है कि उन सार्वजनिक संपर्क वाला मार्गों को संभालने के बदले में कर देगा $ http एपीआई URL के खिलाफ़ कॉल करता है और हर एक कोणीय आंशिक वितरित करेंगे। तो कोई डुप्लिकेशन नहीं है, कोई ओवरलैप नहीं है।

अपने प्रश्न के दूसरे भाग में, आप अभी भी अपने एपीआई डेटा का निर्माण करते समय Django ORM मॉडल संबंधों का उपयोग कर सकते हैं, लेकिन हां, आप फ्रंट एंड के निर्माण के दौरान उस सभी Django भलाई को खो देंगे।

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

हां, यह चीजों के बारे में सोचने का एक बहुत अलग तरीका है, और हाँ यह सीधे Django (या रेल) ​​करने से थोड़ा अधिक जटिल है। यह एक वेब साइट के बजाय एक वेब ऐप बनाने की लागत है।

+1

दोनों वेबपैस बनाने के लिए नहीं हैं? क्लाइंट-साइड बनाम सर्वर-साइड? "वेब साइट की बजाय वेब ऐप बनाने की लागत" का क्या मतलब है? – BluePython

+0

@shacker यह टाइपो है, और आपका मतलब एसओए, या एसपीए है? यदि एसपीए है, तो इसके लिए क्या खड़ा है? :) वैसे भी ग्रेट उत्तर +1 – andi

+0

एंडी - एसपीए: http://en.wikipedia.org/wiki/Single-page_application – shacker