问题描述
如何将基于函数的视图中的api_view装饰器更改为基于类的视图? 我的要求是,我想将HTTP访问方法(如GET,POST,PUT等)限制为特定的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!"})
希望有人知道答案.....
1楼
您可以使用如下的http_method_names
,并希望您使用ModelViewSet
类。
class UserView(viewsets.ModelViewSet):
queryset = UserModel.objects.all()
serializer_class = UserSerializer
http_method_names = ['get']
2楼
你应该使用API??View。 只允许在类中定义的方法是允许的。在此只允许get和post。
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)
3楼
您还可以使用基于通用类的视图。 它们只提供适当的http方法处理程序,例如generics.RetrieveAPIView只允许GET请求。 列出了通用视图及其支持的方法。