2015-11-06 18 views
5

मैं अपने यूआरएल मार्गों पर APIView पंजीकृत करने में सक्षम नहीं हूं। विचारों सेDjango बाकी ढांचे APIView रजिस्टर मार्ग

कोड: यूआरएल से

class PayOrderViewSet(APIView): 
    queryset = PayOrder.objects.all() 

कोड:

router = routers.DefaultRouter() 
router.register(r'document/payorder', PayOrderViewSet) 

इस नव निर्मित यूआरएल पर मौजूद ही नहीं है।

इसके लिए समाधान क्या है?

+0

आपके ब्राउज़र में url के अंत में स्लैश जोड़ें और देखें कि क्या यह काम करता है। – Cheng

+0

अभी भी वही मिला, नहीं मिला:/ –

+0

क्या आप अपना urls.py पोस्ट कर सकते हैं? – Cheng

उत्तर

3

रूटर APIView के साथ काम नहीं करेंगे। वे केवल ViewSets और उनके डेरिवेटिव के साथ काम करते हैं।

आप की संभावना हैं:

class PayOrderViewSet(ModelViewSet): 
+0

"राउटर APIView के साथ काम नहीं करेंगे" कोई उद्धरण? – nehemiah

+1

उद्धरण करने की कोई आवश्यकता नहीं है। 'रूटर' को 'व्यूसेट' द्वारा प्रदान किए गए एपीआई/डेटा की अपेक्षा है लेकिन 'APIView' के साथ उपलब्ध नहीं है। – Linovia

5

राउटर्स और APIViews (सामान्य या अन्यथा) एपीआई अंतिमबिंदुओं बनाने के लिए दो अलग-अलग तरीके हैं। राउटर केवल विचारों के साथ काम करते हैं।

अपने कोड में, आप राउटर के लिए एक व्यूसेट बनाने की कोशिश कर रहे हैं, आपका कोड APIView क्लास को बढ़ा रहा है।

आपकी समस्या का ध्यान रखा जाएगा @linovia ने अपने एस्वर में क्या सुझाव दिया है। मैं सुझाव दूंगा कि उन दोनों के बीच अंतर को समझना अच्छा होगा।

जेनेरिक व्यूसेट जेनेरिकैविव से विरासत प्राप्त करता है लेकिन बुनियादी कार्यों के किसी भी कार्यान्वयन को प्रदान नहीं करता है। बस get_object, get_queryset।

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

viewsets और Generic Class Based APIViews के बारे में अधिक पढ़ें:

संबंधित मुद्दे