2

関数ベースビューのapi_viewデコレータをクラスベースビューに変更するにはどうすればよいですか?私の要件は.....私は、このようGET、POSTなどのHTTPアクセス方法を制限する特定のAPIにhttpメソッドをDjango REST APIに限定する方法

@api_view(['GET', 'POST']) 
def hello_world(request): 
    if request.method == 'POST': 
     return Response({"message": "Got some data!", "data": request.data}) 
    return Response({"message": "Hello, world!"}) 

ホープ誰かが答えを知っているなどを置きたい、あなたがAPIViewを使用する必要があります

答えて

3

http_method_namesを以下のように使用して、ModelViewSetクラスを使用していただければ幸いです。

class UserView(viewsets.ModelViewSet): 
    queryset = UserModel.objects.all() 
    serializer_class = UserSerializer 
    http_method_names = ['get'] 
0

です。あなたがクラスで定義したメソッドだけが許可されます。これは取得と投稿のみが許されます。

from rest_framework.views import APIView 

class SnippetList(APIView): 
""" 
List all snippets, or create a new snippet. 
""" 
def get(self, request, format=None): 
    snippets = Snippet.objects.all() 
    serializer = SnippetSerializer(snippets, many=True) 
    return Response(serializer.data) 

def post(self, request, format=None): 
    serializer = SnippetSerializer(data=request.data) 
    if serializer.is_valid(): 
     serializer.save() 
     return Response(serializer.data, status=status.HTTP_201_CREATED) 
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
0

また、ジェネリッククラスベースのビューを使用することもできます。それらは適切なhttpメソッドハンドラを提供するだけです。例えばgenerics.RetrieveAPIViewはGETリクエストのみを許可します。 documentationには、一般的なビューとそのサポート方法が記載されています。

関連する問題