权限Permissions

身份验证或身份识别本身通常不足以获取信息或代码的访问权限。因此,请求访问的实体必须具有授权

如何确定权限

        REST框架中的权限始终被定义为一个权限类的列表。

        在运行视图的主体之前,检查列表中的每个权限。 如果任何权限检查失败,会抛出一个exceptions.PermissionDenied或                                exceptions.NotAuthenticated异常,并且视图的主体将不会运行

        当权限检查失败时,将返回"403 Forbidden"或"401 Unauthorized"响应,具体根据以下规则:

  •         请求已成功通过身份验证,但权限被拒绝。 — 将返回403 Forbidden响应。
  •         请求未成功认证,最高优先级的认证类不使用WWW-Authenticate标头。— 将返回403 Forbidden响应。
  •         请求未成功认证,最高优先级的认证类使用WWW-Authenticate标头。— 将返回HTTP 401未经授权的响应,并附带适当的WWW-Authenticate标头。

设置权限策略

         全局配置(默认),在setting.py文件中配置

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    )
}

        如果未指定,则此设置默认为允许无限制访问

'DEFAULT_PERMISSION_CLASSES': (
   'rest_framework.permissions.AllowAny',
)

        使用基于APIView类的视图在每个视图或每个视图集的基础上设置身份验证策略。 

from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView

class ExampleView(APIView):
    permission_classes = (IsAuthenticated,)

         使用@api_view装饰器装饰基于函数的视图

from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response

@api_view(['GET'])
@permission_classes((IsAuthenticated, ))

API参考

  •          AllowAny权限类将允许不受限制的访问,而不管该请求是否已通过身份验证或未经身份验证
  •         IsAuthenticated 权限类将拒绝任何未经身份验证的用户的权限,并允许其他权限,注册用户访问
  •         除非user.is_staffTrue,否则IsAdminUser权限类将拒绝任何用户的权限,只能被部分受信任的管理员访问
  •         IsAuthenticatedOrReadOnly 将允许经过身份验证的用户执行任何请求允许匿名用户读取权限,允许对已通过身份验证的用户进行写入权限
  •         DjangoModelPermissions只能应用于具有.queryset属性集的视图,只有在用户通过身份验证并分配了相关模型权限的情况下,才会被授予权限
  •         DjangoModelPermissionsOrAnonReadOnly 允许未经身份验证的用户具有对API的只读访问权限
  •         DjangoObjectPermissions权限只能应用于具有.queryset属性或.get_queryset()方法的视图。只有在用户通过身份验证并且具有相关的每个对象权限和相关的模型权限后,才会被授予权限。Django的标准对象权限框架相关联,该框架允许模型上的每个对象的权限,为了使用此权限类,你还需要添加支持对象级权限的权限后端,例如django-guardian。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值