如何将 http 方法限制为 Django REST api
How can I limit http method to a Django REST api
如何将基于函数的视图中的 api_view 装饰器更改为基于 Class 的视图?我的要求是,我想将 GET、POST、PUT 等 HTTP 访问方法限制为特定的 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。只有您在 class 中定义的方法将是 permissible.In 这只会得到并且 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)
您还可以使用基于 class 的通用视图。它们只提供适当的 http 方法处理程序,例如 generics.RetrieveAPIView 只允许 GET 请求。 documentation 列出了通用视图及其支持的方法。
您可以使用 http_method_names
如下,希望您使用 ModelViewSet
class。
class UserView(viewsets.ModelViewSet):
queryset = UserModel.objects.all()
serializer_class = UserSerializer
http_method_names = ['get']
如何将基于函数的视图中的 api_view 装饰器更改为基于 Class 的视图?我的要求是,我想将 GET、POST、PUT 等 HTTP 访问方法限制为特定的 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。只有您在 class 中定义的方法将是 permissible.In 这只会得到并且 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)
您还可以使用基于 class 的通用视图。它们只提供适当的 http 方法处理程序,例如 generics.RetrieveAPIView 只允许 GET 请求。 documentation 列出了通用视图及其支持的方法。
您可以使用 http_method_names
如下,希望您使用 ModelViewSet
class。
class UserView(viewsets.ModelViewSet):
queryset = UserModel.objects.all()
serializer_class = UserSerializer
http_method_names = ['get']