django rest framework api授权与认证

8 篇文章 0 订阅
8 篇文章 0 订阅

django rest framework api授权

djangorestf 官方文档 授权与认证教程
permissions.py

from rest_framework import permissions

class IsOwnerOrReadOnly(permissions.BasePermission):
    '''
    常规的授权是 只有拥有者才能编辑它
    '''

    def has_object_permission(self, request, view, obj):
        # 读权限 向所有请求开放
        # 所以我们总是允许get, head or options requests.
        if request.method in permissions.SAFE_METHODS:
            return True

        # 写权限 只给拥有者
        return obj.owner == request.user

view.py

'''基于泛型类的视图'''
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer, UserSerializer
from rest_framework import generics
from snippets.permissions import IsOwnerOrReadOnly
from django.contrib.auth.models import User

class UserList(generics.ListAPIView):
    '''
    User表的列表api视图 查 增 操作
    '''
    queryset = User.objects.all()
    serializer_class = UserSerializer

class UserDetail(generics.RetrieveDestroyAPIView):
    '''
    User表的详情api视图 查 改 删操作
    '''
    queryset = User.objects.all()
    serializer_class = UserSerializer



class SnippetList(generics.ListCreateAPIView):
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)


class SnippetDetail(generics.RetrieveDestroyAPIView):
    # detail 所有人都能读,但是只有拥有者可以更改

    # permissions.IsAuthenticatedOrReadOnly 表示没有认证的人有读的权限,认证的人有所有权限
    # IsOwnerOrReadOnly 通过了前面的授权之后,还要通过这个授权
    # 当所有的授权都通过的时候 所有的对象实例都返回true 表示授权通过
    permission_classes = [permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly]
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer

总结:通过传递permission_classes 类变量 传递授权类,

1、请求要进行某个操作的时候 ->

2、传递参数将授权类列表中的多个授权类实例化得到实例化对象->

3、调用所有授权实例对象的has_、permission以及has_object_permission方法 ->

4、所有的返回结果都为true ->

5、该操作的授权才通过,数据操作向下继续进行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值