2016-06-24 14 views
0

私はDjango RESTが新しく、その背後にある概念を理解しようとしています。
私は、次のAPIDjango RESTルータ

serializers.py

class StudentSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Student 
     fields = ('classroom', 'first_name', 'last_name', 'gender', 'birthday') 

class ClassroomSerializer(serializers.ModelSerializer): 
    students = StudentSerializer(many=True) 

    class Meta: 
     model = Classroom 
     depth = 1 
     fields = ('school', 'academic_year', 'classroom', 'floor', 'students') 

views.py

def index(request): 
    return render_to_response('school_app/base.html', RequestContext(request)) 

class StudentViewSet(viewsets.ModelViewSet): 
    queryset = Student.objects.all() 
    serializer_class = StudentSerializer 

class ClassroomViewSet(viewsets.ModelViewSet): 
    queryset = Classroom.objects.all() 
    serializer_class = ClassroomSerializer 

urls.py

router = routers.SimpleRouter() 

router.register(r'classrooms', ClassroomViewSet) 
router.register(r'students', StudentViewSet) 

urlpatterns = router.urls 

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), 
    url(r'^classrooms/$', school_app.views.ClassroomViewSet.as_view({'get': 'list'}), name='classroom-list'), 
    url(r'^students/$', school_app.views.StudentViewSet.as_view({'get': 'list'}), name='student-list'), 
    url(r'^students/(?P<pk>[^/.]+)/$', school_app.views.StudentViewSet.as_view({'get': 'list'}), name='student-list'), 
    url(r'^', 'school_app.views.index', name='index-page'), 
    #url(r'^', include(router.urls)), 
] 

そして、私は一つのことを理解することはできませんセットアップを持っています。私はこの

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), 
    url(r'^', include(router.urls)), 
] 

ようurls.py書く場合のように、クリックすると「/教室/」または「/学生/」に行く、とするとき、私は「、/生徒を二つのリスト(学生や教室を)見ることができます/ 1 "、私はその特定の学生のインスタンスを取得 - しかし、"インデックス "ビューは動作しません。

urls.pyがこの

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), 
    url(r'^classrooms/$', school_app.views.ClassroomViewSet.as_view({'get': 'list'}), name='classroom-list'), 
    url(r'^students/$', school_app.views.StudentViewSet.as_view({'get': 'list'}), name='student-list'), 
    url(r'^students/(?P<pk>[^/.]+)/$', school_app.views.StudentViewSet.as_view({'get': 'list'}), name='student-list'), 
    url(r'^', 'school_app.views.index', name='index-page'), 
] 

のように書かれている場合は、「/教室/」または「/生徒」に行くとき、私はリストを取得します。私も "インデックス"ビューを取得している、私は2つのリストの特定のインスタンスを取得していないが、代わりに私は "インデックス"ビューを取得します。

なぜですか?

答えて

0

非常に手作業です。 DRF DefaultRouterを使用して、インスタンス/リストの厄介なものの世話をしてください。

from rest_framework import routers 

router = routers.DefaultRouter() 

router.register('classrooms', school_app.views.ClassroomViewSet) 
router.register('students', school_app.views.StudentViewSet) 

urlpatterns = patterns('', 
    url(r'^', include(router.urls)), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), 
    # ... other urls... 
) 
+0

Angular JSアプリで使用しても大丈夫ですか? –

+0

はい、問題ありません。この部分はAngularJSで使用されていることとは関係ありません。正しいURL-> Viewマッピングを作成することです。私は自分のDRFサービスを使ってAngularJSフロントエンドクライアントにサービスを提供しています。 –

関連する問題