2015-09-15 9 views
14

relevant हो सकता है।Django रीस्ट फ्रेमवर्क: विचारों और विचारों के बीच अंतर?

विचारों और viewsets के बीच क्या अंतर है? और राउटर और urlpatterns के बारे में क्या?

+0

आप पढ़ सकते हैं [viewsets के बारे में ट्यूटोरियल] है (http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers/) ? यह विचारों + urlpatterns विचारों + राउटर से आगे बढ़ने का वर्णन करता है। क्या कोई विशिष्ट बात है जिसे आप समझ में नहीं आते? – Alasdair

+1

हाय @ अलास्डेयर, हां, मैंने ट्यूटोरियल पढ़ा है और यह स्पष्ट रूप से बताता है कि विचारों के साथ कैसे काम करना है, यह विचारों और विचारों के बीच मतभेदों पर कई शब्द नहीं लग रहा है। एकमात्र पैराग्राफ जो प्रासंगिक प्रतीत होता है वह है "व्यूसेट क्लास लगभग कक्षाओं के समान ही हैं, सिवाय इसके कि वे पढ़ना, या अपडेट करना, और विधि हैंडलर जैसे नहीं हैं या नहीं, जैसे ऑपरेशन प्रदान करते हैं।" लेकिन यह पैराग्राफ भी स्पष्ट स्पष्ट नहीं लगता है (उदाहरण के लिए, आप प्राप्त करने या रखने के लिए क्यों पढ़ना और अपडेट करना पसंद करेंगे?)। –

+0

'get' और 'put'' पर' read' और 'update' का लाभ यह है कि आपने उन्हें कॉल करने के लिए उपयोग की जाने वाली HTTP विधियों से एपीआई विधियों को अनसुलझा कर दिया है। फिर आप राउटर का उपयोग यूआरएल में विचारों को हुक करने के लिए कर सकते हैं, जो कोड सहेजता है और आपके एपीआई को और अधिक सुसंगत बना सकता है। – Alasdair

उत्तर

37

ViewSets और Routers यदि आप मानक व्यवहार और मानक यूआरएल का लक्ष्य रख रहे हैं, तो अपने एपीआई को तेज करने के लिए सरल उपकरण हैं।

ViewSet का उपयोग करके आपको ऑब्जेक्ट्स की सूची और एक ऑब्जेक्ट का विवरण प्राप्त करने के लिए अलग-अलग दृश्य बनाने की ज़रूरत नहीं है। व्यूसेट आपके लिए लगातार सूची और विवरण दोनों में संभाल लेगा।

Router का उपयोग करते हुए कनेक्ट करेगा अपने ViewSet में "Standarized" (यह किसी भी तरह से वैश्विक मानक नहीं है, बस कुछ संरचना है कि Django बाकी ढांचे के रचनाकारों द्वारा लागू किया गया था) URL की संरचना। इस तरह आपको हाथ से अपना urlpatterns बनाने की ज़रूरत नहीं है और आपको गारंटी है कि आपके सभी यूआरएल सुसंगत हैं (कम से कम उस परत पर Router इसके लिए ज़िम्मेदार है)।

ऐसा लगता है कि कुछ विशाल एपीआई लागू नहीं करते हैं, जहां आपके पास ViewSets और Routers का उपयोग करके कई और कई urlpatterns और विचार होंगे, जिससे बड़ा अंतर आएगा।

बेहतर विवरण के लिए:

views.py:

from snippets.models import 
from rest_framework import viewsets 
from yourapp.serializers import ArticleSerializer 

class ArticleViewSet(viewsets.ModelViewSet): 
    queryset = Article.objects.all() 
    serializer_class = ArticleSerializer 

urls.py: इस ViewSets और रूटर का उपयोग कर कोड है

from django.conf.urls import url, include 
from yourapp import views 
from rest_framework.routers import DefaultRouter 

router = DefaultRouter() 
router.register(r'articles', views.ArticleViewSet) 

urlpatterns = [ 
    url(r'^', include(router.urls)), 
] 

और बराबर परिणाम का उपयोग कर सामान्य दृश्य और कोई राउटर:

विचार.py

from snippets.models import Article 
from snippets.serializers import ArticleSerializer 
from rest_framework import generics 


class ArticleList(generics.ListCreateAPIView): 
    queryset = Article.objects.all() 
    serializer_class = ArticleSerializer 


class ArticleDetail(generics.RetrieveUpdateDestroyAPIView): 
    queryset = Article.objects.all() 
    serializer_class = ArticleSerializer 

urls.py

from django.conf.urls import url, include 
from yourapp import views 

urlpatterns = [ 
    url(r'articles/^', views.ArticleList.as_view(), name="article-list"), 
    url(r'articles/(?P<pk>[0-9]+)/^', views.ArticleDetail.as_view(), name="article-detail"), 
] 
+0

क्षमा करें, लेकिन मुझे इसे देखना जारी नहीं है। :('राउटर = राउटर। सिंपल राउटर(); राउटर.रेस्टर (आर'एक्ट्स', अकाउंट व्यूसेट) 'और' urlpatterns = [url (r '^ accounts /', accountView),] '? –

+1

के बीच क्या अंतर है पहला व्यक्ति 2 यूआरएल पंजीकृत करेगा, एक सूची के लिए और एक विस्तार से, अद्यतन उत्तर – GwynBleidD

+0

देखें बहुत स्पष्ट, धन्यवाद! :) –

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