2013-06-19 3 views
5

Я создаю api для api для классов для приложения для документации, но я хочу добавить определенные разрешения для определений сообщений и патчей в моем APIView. Например,Как добавить разрешения в Django Rest Framework для конкретных запросов

class DocumentList(APIView): 

    def get(self,request,format=None): 
     ... blah 

    def post(self,request,format=None): 
     only allow administrators to create new documents 
     ... blah 

ответ

2

By default permissions are unrestricted. В вашем settings.py вы можете указать другой набор значений по умолчанию, где пользователи должны пройти аутентификацию и иметь правильное разрешение модели Django. Вам нужно будет указать атрибут model в вашем классе вида для вступления в силу DjangoModelPermissions.

# settings.py 
REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': (
     'rest_framework.permissions.IsAuthenticated', 
     'rest_framework.permissions.DjangoModelPermissions' 
    ) 
} 

# views.py 
class DocumentList(APIView): 
    model = Document 
    ... 

DjangoModelPermissions разрешение карта can be found in the source.

  • GET, OPTIONS и ГОЛОВА не требуют разрешений, но так как мы определили IsAuthenticated мы все еще требуют, чтобы карты
  • POST добавить
  • PUT и PATCH карты для изменения
  • DELETE карты для delete
0

Это то, что я сделал. Справка из documentation

Created класс разрешений для проекта

проект/permissions.py

from rest_framework import permissions 

class IsAuthenticatedOrReadOnly(permissions.BasePermission): 

    def has_object_permission(self, request, view, obj): 
     # Read permission - always allow for GET request 
     if request.method in permissions.SAFE_METHODS: 
      return True 

     # Write permissions - only if authenticated 
     return request.user and request.user.is_authenticated() 

Теперь используйте этот PermissionClass в представлении

@permission_classes((IsAuthenticatedOrReadOnly,)) 
class ShopViewSet(viewsets.ModelViewSet): 
    queryset = Shop.objects.all() 
    serializer_class = ShopSerializer 
Смежные вопросы