Настроить метод POST и DELETE дескриптора представления в структуре отдыха django - PullRequest
0 голосов
/ 24 октября 2019

Я создал View, который может обрабатывать метод POST и DELETE

class MyView(APIView): 
    def valid_method(self,data):
        method = self.request.method 
        if method == 'POST':           
            ser = self.PostSerializer(data=data)       
        elif method == 'DELETE':           
            ser = self.DeleteSerializer(data=data)        
        else:           
            raise MethodValidationError(errormessage)       
        return ser       
    def post(self, request):       
        ser = self.valid_method(dara = request.data)        
        other code    
    def delete(self, request):       
        ser = self.valid_method(dara = request.data)
        other code

Есть ли лучший способ реализовать MyView? Должен ли я создать новый базовый вид? Или есть какой-нибудь простой способ определить допустимый метод HTTP в APIView?

1 Ответ

0 голосов
/ 24 октября 2019

Использование GenericAPIView (наследуется от APIView), который предоставляет такие методы, как get_serializer_class, где вы можете реализовать логику в методе valid_method.

Пример :

from rest_framework.generics import GenericAPIView


class CustomGenericAPIView(GenericAPIView):
    serializer_class = None

    def get_serializer_class(self, *args, **kwargs):
        request_method = self.request.method
        if request_method == "POST":
            return self.PostSerializer
        elif request.method == "DELETE":
            return self.DeleteSerializer
        else:
            return super().get_serializer_class(*args, **kwargs)

    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        # rest of the code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...