2017-10-04 10 views
0

私が働いているので、私の./views.pyは本当に競争が激化しており、DRYであることをリファクタリングする方法があるのだろうかと思います。私はそうするために、ビューごとに複数のシリアライザを指定する機能を必要としていると思います。Django Rest Frameworkを使用してビューごとに複数のシリアライザを使用することができます

dataは、受信したデータを実際に記述し、正しいシリアライザに渡すことができるようにあいまいである必要があります。つまり、受信したデータのAPIルートを知る必要があります。ルートごとに1つのクラスを除いてどのように行うかわからない、どのように私は現在それをセットアップしている。

次に、ビューに複数のシリアライザを指定してそれぞれのデータを送信する方法が必要です。これが可能であることを見ていない。

# ./urls.py 

from .views import (
    SecurityQuestionsAPIView, 
    UserSigninTokenAPIView, 
    UsernameRecoveryAPIView, 
    ValidateKeyAPIView 
) 

urlpatterns = [ 
    url(r'^signin/', UserSigninTokenAPIView.as_view(), name='signin'), 
    url(r'^verify/', verify_jwt_token), 
    url(r'^refresh/', refresh_jwt_token), 
    url(r'^username_recovery/', UsernameRecoveryAPIView.as_view(), name='username_recovery'), 
    url(r'^validate_key/', ValidateKeyAPIView.as_view(), name='validate_key'), 
    url(r'^security_questions/', SecurityQuestionsAPIView.as_view(), name='security_questions'), 
] 

# ./views.py 
from .serializers import (
    SecurityQuestionsSerializer, 
    UserSigninTokenSerializer, 
    UsernameRecoverySerializer, 
    ValidateKeySerializer 
) 

# Used for logging into the web application 
class UserSigninTokenAPIView(APIView): 
    permission_classes = [AllowAny] 
    serializer_class = UserSigninTokenSerializer 

    def post(self, request, *args, **kwargs): 
     data = request.data 
     serializer = UserSigninTokenSerializer(data=data) 
     if serializer.is_valid(raise_exception=True): 
      new_data = serializer.data 
      return Response(new_data, status=HTTP_200_OK) 
     return Response(serializer.errors, status=HTTP_400_BAD_REQUEST) 

class UsernameRecoveryAPIView(APIView): 
    permission_classes = [AllowAny] 
    serializer_class = UsernameRecoverySerializer 

    def post(self, request, *args, **kwargs): 
     data = request.data 
     serializer = UsernameRecoverySerializer(data=data) 
     if serializer.is_valid(raise_exception=True): 
      new_data = serializer.data 
      return Response(new_data, status=HTTP_200_OK) 
     return Response(serializer.errors, status=HTTP_400_BAD_REQUEST) 

class ValidateKeyAPIView(APIView): 
    permission_classes = [AllowAny] 
    serializer_class = ValidateKeySerializer 

    def post(self, request, *args, **kwargs): 
     data = request.data 
     serializer = ValidateKeySerializer(data=data) 
     if serializer.is_valid(raise_exception=True): 
      new_data = serializer.data 
      return Response(new_data, status=HTTP_200_OK) 
     return Response(serializer.errors, status=HTTP_400_BAD_REQUEST) 

class SecurityQuestionsAPIView(APIView): 
    permission_classes = [AllowAny] 
    serializer_class = SecurityQuestionsSerializer 

    def post(self, request, *args, **kwargs): 
     data = request.data 
     serializer = SecurityQuestionsSerializer(data=data) 
     if serializer.is_valid(raise_exception=True): 
      new_data = serializer.data 
      return Response(new_data, status=HTTP_200_OK) 
     return Response(serializer.errors, status=HTTP_400_BAD_REQUEST) 

答えて

1

あなたはおそらくCreateApiView

class UserSigninTokenAPIView(CreateApiView): 
    permission_classes = [AllowAny] 
    serializer_class = UserSigninTokenSerializer 


class UsernameRecoveryAPIView(CreateApiView): 
    permission_classes = [AllowAny] 
    serializer_class = UsernameRecoverySerializer 


class ValidateKeyAPIView(CreateApiView): 
    permission_classes = [AllowAny] 
    serializer_class = ValidateKeySerializer 


class SecurityQuestionsAPIView(CreateApiView): 
    permission_classes = [AllowAny] 
    serializer_class = SecurityQuestionsSerializer 
を探しています
関連する問題