【问题标题】:Adding IsAuthenticatedOrReadOnly permission in django rest framework在 django rest 框架中添加 IsAuthenticatedOrReadOnly 权限
【发布时间】:2022-02-02 02:46:41
【问题描述】:

假设我有以下模型 -

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 的人员列表中添加、更新删除或检索对象。以及非授权用户的只读权限。我尝试浏览文档,但这一切都非常令人困惑。谁能解释一下?

【问题讨论】:

    标签: python django rest django-views django-rest-framework


    【解决方案1】:

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

    来自 DRF Docs

    IsAuthenticatedOrReadOnly 将允许经过身份验证的用户执行任何请求。未经授权的用户的请求只有在请求时才被允许 方法是“安全”方法之一; 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) 
    

    【讨论】:

    • 那不行。我仍然可以作为匿名用户删除。
    • 请再次检查,因为它只允许匿名用户的GETHEADOPTIONS 请求,而不是DELETE 请求。这是官方文档link
    猜你喜欢
    • 1970-01-01
    • 2017-04-13
    • 2016-11-20
    • 2014-08-25
    • 2016-01-25
    • 2019-07-13
    • 2021-11-01
    • 1970-01-01
    • 2016-10-05
    相关资源
    最近更新 更多