インタフェースの設計と単一のグループ調査インタフェースの実現

4733 ワード

restfulインタフェース仕様に基づくインタフェース設計
urlpatterns = [
    #   books     
    url(r'^books/$', views.BookAPIView.as_view()),  #
    url(r'^books/(?P\d+)/$', views.BookAPIView.as_view()),  #   、  、 (  |  ) 
]

単一クラスタ・インタフェースの実装
from rest_framework.views import APIView
from rest_framework.response import Response
from . import models
class BookAPIView(APIView):
    def _multiple_get(self):
        #     ,   QuerySet[Obj, Obj],       list
        # return list(models.Book.objects.all())

        # QuerySet[dict, dict]
        # print(models.Book.objects.values('name', 'price'))
        # QuerySet[tuple, tuple]
        # print(models.Book.objects.values_list('name', 'price'))

        return Response(list(models.Book.objects.values('name', 'price')))

    def _single_get(self, pk):
        # return Response(models.Book.objects.filter(pk=pk).values('name', 'price').first())

        #         try   ,    if  
        try:
            return Response(models.Book.objects.values('name', 'price').get(pk=pk))
        except:
            return Response('     ')

    #
    def get(self, request, *args, **kwargs):
        pk = kwargs.get('pk')
        if pk:
            #     
            return self._single_get(pk)
        else:
            #     
            return self._multiple_get()