【发布时间】:2020-07-09 11:16:32
【问题描述】:
我正在使用 Django 和 Django-Rest-Framework 为一个与学校相关的小型项目编写 API。我正在尝试找出权限。
我正在为我的视图使用 APIView,并希望为每个处理程序方法设置不同的权限,而无需编写更多视图。
这是我对博客模块的看法之一:
(此视图用于/posts/)
from .serializers import *
from django.db.models import Case, When
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.decorators import permission_classes
from rest_framework import status, permissions
# Create your views here.
class PostList(APIView):
"""
API Endpoint to List Posts
METHODS: GET, POST
"""
@permission_classes([permissions.AllowAny,])
def get(self, request, format=None):
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
@permission_classes([permissions.IsAuthenticated])
def post(self, request, format=None):
serializer = PostCreationSerializer(data=request.data)
if serializer.is_valid():
obj = serializer.save()
data = serializer.data
data["id"] = obj.id
return Response(data, status=status.HTTP_201_CREATED)
return Response(status=status.HTTP_400_BAD_REQUEST)
当前的默认值为permissions.IsAuthenticated,尽管更改它不一定有帮助,因为我仍然需要单独更改一些权限。
所以我应该能够在未通过/posts/ 验证的情况下发出 GET 请求并获得所有帖子的列表,而我应该从对/posts/ 的 POST 请求中获得 401。但是,即使是 GET 请求也会返回 401 状态码。
这样做的正确方法是什么……如果有的话。
编辑:虽然我提供了自己问题的答案,但我仍然想知道是否有更正确的方法来解决这个问题。
【问题讨论】:
标签: python django django-rest-framework permissions