在django rest框架中添加IsAuthenticatedOrReadOnly权限

时间:2015-12-26 13:49:02

标签: 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

用于创建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) 

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

1 个答案:

答案 0 :(得分:1)

您需要IsAuthenticatedOrReadOnly权限类添加到PersonDetail视图。

来自DRF Docs

  

IsAuthenticatedOrReadOnly将允许经过身份验证的用户执行任何请求。只有在请求时才允许对未授权用户的请求   方法是" safe"方法; GETHEADOPTIONS

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)