【问题标题】:How can I limit http method to a Django REST api如何将 http 方法限制为 Django REST api
【发布时间】:2017-07-04 12:30:46
【问题描述】:
如何将基于函数的视图中的 api_view 装饰器更改为基于类的视图?我的要求是,我想将 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!"})
希望有人知道答案.....
【问题讨论】:
标签:
python
django
django-models
django-rest-framework
django-class-based-views
【解决方案1】:
您可以使用http_method_names 如下,希望您使用ModelViewSet 类。
class UserView(viewsets.ModelViewSet):
queryset = UserModel.objects.all()
serializer_class = UserSerializer
http_method_names = ['get']
【解决方案2】:
您还可以使用基于通用类的视图。它们只提供适当的 http 方法处理程序,例如 generics.RetrieveAPIView 只允许 GET 请求。 documentation at 列出了通用视图及其支持的方法。
【解决方案3】:
您应该使用 APIView。只有你在类中定义的方法是允许的。在这个方法中,只有 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)