मैं डीआरएफ 3.1 का उपयोग करके एक एपीआई बनाने का प्रयास कर रहा हूं। मैंने ModelViewSet का उपयोग करके मैनेजमेंट फ़ंक्शन बनाकर और डिफ़ॉल्ट राउटर के साथ पंजीकरण करके शुरुआत की। यह पूरी तरह से काम करता है और ब्राउज़र में देखे जाने पर डिफ़ॉल्ट एपीआई रूट व्यू उचित लिंक उत्पन्न करता है। मैंने फिर ReadOnlyModelViewSet का उपयोग कर मानक उपयोगकर्ताओं के लिए अधिक प्रतिबंधित विचार बनाए, समस्या तब हुई जब मैंने राउटर के साथ इन प्रतिबंधित विचारों को पंजीकृत करने का प्रयास किया क्योंकि ReadOnlyModelViewSets एपीआई रूट व्यू पर लिंक को ओवरराइट करने के लिए दिखाई देते हैं। जेनरेट किए गए URL काम करने के लिए दिखाई देते हैं जब ब्राउज़र में टाइप लेकिन एपीआई जड़ दृश्य पर लिंक नहीं हैं मैं अपेक्षा के अनुरूपकई विचारों के साथ Django रेस्ट फ्रेमवर्क रूटर
serializers.py
class AdminUnitSerializer(serializers.HyperlinkedModelSerializer):
'''
model serializer for admin users containing all fields
'''
url = HyperlinkedIdentityField(view_name='unit-detail')
class Meta:
model = Unit
fields = ('url', 'id', 'name', 'symbol', 'converters_from', 'converters_to')
class UserUnitSerializer(serializers.HyperlinkedModelSerializer):
'''
model serializer for standard users containing restricted set of fields
'''
url = HyperlinkedIdentityField(view_name='unit-detail')
class Meta:
model = Unit
fields = ('url', 'id', 'name', 'symbol')
views.py
class AdminUnitViewSet(viewsets.ModelViewSet):
'''
simple viewset providing CRUD operations on unit objects
'''
queryset = models.Unit.objects.all()
serializer_class = serializers.AdminUnitSerializer
permission_classes = (permissions.IsAdminUser,)
class UserUnitViewSet(viewsets.ReadOnlyModelViewSet):
'''
read only view set providing list and detail views for unit objects
'''
queryset = models.Unit.objects.all()
serializer_class = serializers.UserUnitSerializer
permission_classes(permissions.IsAuthenticated,)
यूआरएल। py
router.register(r'manangeunits', views.AdminUnitViewSet)
router.register(r'readunits', views.UserUnitViewSet)
urlpatterns = [
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^rest-auth/', include('rest_auth.urls')),
url(r'^', include(router.urls))
]
इस इस
012 की तरह एक डिफ़ॉल्ट एपीआई जड़ दृश्य पेश करता है{
"manangeunits": "http://localhost:8000/readunits/",
"readunits": "http://localhost:8000/readunits/",
}
है कि मैं क्या देख रहा हूँ इस
{
"manangeunits": "htt://localhost:8000/manageunits/",
"readunits": "htt://localhost:8000/readunits/",
}
यूआरएल है, जबकि 'HTT: // स्थानीय होस्ट: 8000/manageunits /' वैध और पहुँचा जा सकता है जब पता ब्राउज़र यह सिर्फ करता है में लिखा गया है एपीआई रूट दृश्य
किसी भी मदद बहुत सराहना की जाएगी