2015-12-26 26 views
3

假設我有以下的模型 -添加IsAuthenticatedOrReadOnly許可

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

你需要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) 
+0

那不行。我仍然可以作爲匿名用戶刪除。 – qwertp

+2

請再次檢查,因爲它只允許匿名用戶使用'GET','HEAD'和'OPTIONS'請求,而不允許'DELETE'請求。這裏是官方文件[鏈接](http://www.django-rest-framework.org/api-guide/permissions/#isauthenticatedorreadonly) –