2011-08-10 16 views
23

मैं बैकबोन.जेएस (प्लस jQuery) को अपने django ऐप के साथ काम करने के लिए देख रहा हूं, लेकिन मेरे कुछ प्रश्न हैं। मैंने पहले कभी एक आरामदायक सेटअप का उपयोग नहीं किया है, इसलिए मुझे आरईएसटी का उपयोग करने के "उचित" तरीके से बहुत कम ज्ञान है।django और backbone.js प्रश्न

  1. बैकबोन बाकी वास्तुकला का उपयोग करता है, लेकिन Django डिफ़ॉल्ट रूप से इस समर्थन नहीं करता। ऐसा लगता है कि रीस्टी एपीआई को लागू करने के लिए टस्टीपी या पिस्टन जाने का तरीका है। क्या इसका मतलब है कि मुझे बैकबोन के माध्यम से किए गए किसी भी AJAX कॉल के लिए एपीआई का उपयोग करना होगा? यदि यह सही है, तो क्या कोई प्रदर्शन समस्याएं या अन्य विषमताएं हैं जिनके बारे में मुझे अवगत होना चाहिए?

  2. मेरे अधिकांश django ऐप प्रमाणीकरण की आवश्यकता है। मेरी समझ यह है कि एक आरईएसटी एपीआई की कोई अवधारणा नहीं है कि उपयोगकर्ता प्रमाणित है या नहीं, तो मैं इसे कैसे संभाल सकता हूं? क्या मैं अभी भी अपने विचारों के साथ लॉगिन आवश्यक सजावट का उपयोग करने में सक्षम हूं या क्या मैंने कुछ और किया है?

  3. Django की अनुमति ढांचे के बारे में क्या, क्या मैं अभी भी अनुमतियों और समूहों को सेट/चेक करने में सक्षम हूं?

कृपया प्रत्येक प्रश्न को व्यक्तिगत रूप से उत्तर देने के लिए स्वतंत्र महसूस करें या यदि आप मेरा समग्र भ्रम देख सकते हैं, तो कृपया मुझे सही दिशा में इंगित करें।

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

उत्तर

21

आप जो भी यूआरएल चाहते हैं उसके प्रति रीढ़ की हड्डी संग्रह/मॉडल को इंगित कर सकते हैं और प्रतिक्रिया को पार्स कर सकते हैं हालांकि आप अपनी रीढ़ की हड्डी "सबक्लास" में चाहते हैं।

Model.url:

http://documentcloud.github.com/backbone/docs/backbone.html#section-43

Collection.parse:

http://documentcloud.github.com/backbone/docs/backbone.html#section-69

आप सेटअप एक बंद अनुरोध संचालकों कि रीढ़ की हड्डी के लिए कुछ json लौट सकते हैं पार्स करने के लिए कर सकते हैं/बिना निगलना पिस्टन या tastypie। लेकिन, हाँ, डीजेंगो के साथ व्यापक आरईएसटी के लिए ये दो अच्छे समाधान हैं।

यहां कुछ अच्छी युक्तियां दी गई हैं: http://joshbohde.com/blog/backbonejs-and-django tastypie के साथ रीढ़ की हड्डी का उपयोग करने के लिए।

स्वादिष्ट के साथ, आप कस्टम प्राधिकरण/प्रमाणीकरण के साथ एपीआई तक पहुंच सीमित कर सकते हैं।

http://django-tastypie.readthedocs.org/en/latest/authentication_authorization.html

आप अधिकरण योजना सुनिश्चित करें कि वस्तुओं की सूची केवल वस्तु जो उपयोगकर्ता "मालिक", कुछ इस तरह होना करने के लिए फ़िल्टर किया जाता है बनाता है कि बना सकते हैं:

class PerUserAuthorization(Authorization): 
    def apply_limits(self, request, object_list): 
    if request and hasattr(request, 'user'): 
     if request.user.is_authenticated(): 
      object_list = object_list.filter(user=request.user) 
      return object_list 

    return object_list.none() 

वैकल्पिक/अतिरिक्त , आप ऐसे संसाधन बना सकते हैं जो ModelResource.apply_authorization_limits विधि को ओवरराइड करके उपयोगकर्ता की ऑब्जेक्ट्स को केवल लौट सकें और obj_create विधि को ओवरराइड करके उपयोगकर्ता को स्वचालित रूप से बनाए गए ऑब्जेक्ट्स से संबद्ध करें, जैसे:

class PerUserModelResource(ModelResource): 

    def obj_create(self, bundle, request=None, **kwargs): 
    return ModelResource.obj_create(self, bundle, request, user=request.user) 

    def apply_authorization_limits(self, request, object_list): 
    return object_list.filter(user=request.user) 

फिर, आप PerUserModelResource से उत्तराधिकारी हो सकते हैं और/या संसाधन के लिए प्रमाणीकरण PerUser प्राधिकरण बना सकते हैं।

class ImageGroupResource(PerUserModelResource): 
    study = fields.ForeignKey(StudyResource, "study") 
    uploads = fields.ToManyField('cm.api.UploadResource', 'uploads', null=True) 

    class Meta: 
    queryset = ImageGroup.objects.all() 
    list_allowed_methods = ['get', 'post'] 
    detail_allowed_methods = ['get', 'post', 'put', 'delete'] 
    resource_name = 'cm/imagegroup' 
    authorization = PerUserAuthorization() 
    filtering = { 
     'name': ALL, 
     'created_dt': ['exact', 'range', 'gt', 'gte', 'lt', 'lte'], 
    } 

बैकबोन और django-tastypie अच्छी तरह से प्रलेखित हैं। अवधारणा का एक सरल सबूत बनाने और दस्तावेज़ों के माध्यम से कुछ बार पढ़ने के लिए समय निकालें। वे मटर और गाजर की तरह एक साथ जाते हैं।

+0

प्रतिक्रिया के लिए धन्यवाद। अनुमतियों और समूहों के बारे में क्या, क्या इसे कार्यान्वित करना और उनका उपयोग करना संभव है? – imns

+1

सुनिश्चित करें, केवल उसी विधियों का उपयोग करें और, सीमा लागू करने के लिए उपयोगकर्ता की पहचान का उपयोग करने के बजाय, समूह की स्थिति या मनमानी स्थितियों का उपयोग करें। –