在 django Rest 框架中添加 IsAuthenticatedOrReadOnly 权限

qwe*_*rtp 5 python django rest django-views django-rest-framework

假设我有以下模型 -

class Person(models.Model):
    name = models.CharField(max_length=200)
    clubs = models.ManyToManyField(Club,related_name = 'people')
    date = models.DateTimeField(default=datetime.now)
    
    def __str__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

用于创建rest api。

views.py

class PersonDetail(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = PersonSerializer

    def get_object(self):
        person_id = self.kwargs.get('pk',None)
        return Person.objects.get(pk=person_id) 
Run Code Online (Sandbox Code Playgroud)

如何添加权限,以便只有经过身份验证的用户才能从 api 中的人员列表添加、更新、删除或检索对象。以及非授权用户的只读权限。我尝试浏览文档,但这一切都非常令人困惑。有人可以解释一下吗?

Rah*_*pta 4

您需要添加IsAuthenticatedOrReadOnly权限类别才能PersonDetail查看。

来自 DRF文档

IsAuthenticatedOrReadOnly将允许经过身份验证的用户执行任何请求。仅当请求方法是“安全”方法之一时,才允许未经授权的用户提出请求;GETHEAD或者OPTIONS

from rest_framework.permissions import IsAuthenticatedOrReadOnly


class PersonDetail(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = PersonSerializer
    permission_classes = (IsAuthenticatedOrReadOnly,) # specify the permission class in your view

    def get_object(self):
        person_id = self.kwargs.get('pk',None)
        return Person.objects.get(pk=person_id) 
Run Code Online (Sandbox Code Playgroud)

  • 请再次检查,因为它只允许匿名用户的“GET”、“HEAD”和“OPTIONS”请求,不允许“DELETE”请求。这是官方文档[链接](http://www.django-rest-framework.org/api-guide/permissions/#isauthenticatedorreadonly) (2认同)