Loading

13.权限-登录和权限

如果我们希望只有通过认证的用户才可以进行一些操作,例如删除、更新等,就需要为设置一些权限

导包:from rest_framework import permissions
使用
1.在视图类方法里面直接定义权限
# permission_classes 为当前视图应该遵守的权限,是一个元组
# IsAuthenticatedOrReadOnly:如果是已经登录的用户,就允许所做创建功能,否则只读
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
2.如果需要细分权限,当前用户创建的代码片段,当前用户可以做操作
在项目下创建一个permissions.py 文件,在里面定义权限类
from rest_framework import  permissions


# 定义一个权限类,继承permissions.BasePermission 权限基类
class IsOwnerOrReadOnly(permissions.BasePermission):
# permissions.py

from rest_framework import permissions
# 定义一个权限类,继承permissions.BasePermission 权限基类
class IsOwnerOrReadOnly(permissions.BasePermission):
    # has_object_permission 是BasePermission 提供的方法
    # 如果权限被授予,返回True,否则返回False
    def has_object_permission(self, request, view, obj):
        # 判断当前请求的http方法 是否属于 permissions 里面定义的安全方法之一 ,GET', 'HEAD', 'OPTIONS'
        if request.method in permissions.SAFE_METHODS:
            # 当请求方法是安全方法时,不会造成破坏性操作,直接返回true
            return True

        # obj是当前对象的实例
        # 判断当前对象的用户 和 当前请求中登录的用户是不是同一个人,是同一个,返回True,不是一个人,返回False
        return obj.owner == request.user
#views.py
# 导入权限类 
from snippets.permissions import IsOwnerOrReadOnly

在视图类里面 ,代码片段操作的视图类权限设定元组追加我们定义的权限类
permission_classes = (permissions.IsAuthenticatedOrReadOnly,IsOwnerOrReadOnly,)

 

posted @ 2022-04-30 15:07  木子七  阅读(205)  评论(0编辑  收藏  举报