Django REST app的权限问题

在Django REST中提供了三个方式权限,达到了可以同时控制用户认证,用户访问权限,和不同用户可访问次数的问题。具体方式如下:

  • authentication (认证)
  • Permissions (权限)
  • throttling (节流)

authentication

认证是在视图类运行之前执行的。只有在确定用户的身份之后才涉及到权限控制和节流控制。 
如果没有认证,那么:

  • request.user将会是一个匿名用户,即django.contrib.auth.models.AnonymousUser的一个对象,
  • request.auth将会被设置为None。

authentication的设置:

1.在settings中设置session认证方式:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        #设置基础认证方式
        'rest_framework.authentication.BasicAuthentication',
        #设置session认证方式
        'rest_framework.authentication.SessionAuthentication',
    )
}

2.在settings中设置认证方式为token认证:

INSTALLED_APPS = (
    ...
    'rest_framework.authtoken'
)
'DEFAULT_AUTHENTICATION_CLASSES':(
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
        ),
  • 设置好token方式之后,一定要重新迁移数据库

在token认证之后注意的地方:

  • request.user将会是一个Django的用户对象
  • request.auth将会是一个rest_framework.authtoken.models.Token的对象

Permissions

Permissions是在认证之后才执行的,它确定的是当前的用户有没有权限访问某些网页,Permissions既可以设置成全局的权限,也可以设置成针对特定网页的权限。 
权限的设置种类如下:

  • AllowAny
  • IsAuthenticated
  • IsAdminUser
  • IsAuthenticatedOrReadOnly
  • DjangoModelPermissions
  • DjangoModelPermissionsOrAnonReadOnly
  • DjangoObjectPermissions

Permissions的设置:

1.全局设置权限:

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

2.在具体视图类中指定具体权限

from rest_framework import permissions
class ProductListViews(generics.ListAPIView):
    """
    产品列表
    """   

    #获取产品的所有对象
    queryset = Product.objects.all()
    #指明使用的序列器类
    serializer_class = ProductListSerializer
    #指定具体权限,允许任何人访问
    permission_classes = (permission.AllowAny)

throttling

throttling控制的是用户可以向API发出请求的次数,一般用于控制对匿名用户访问次数的限制,也可用于对不同认证用户的访问次数的限制。

在settings中设置throttling: 
1.全局throttling的设置:

REST_FRAMEWORK = {
    #
    'DEFAULT_THROTTLE_CLASSES': (
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle'
    ),
    'DEFAULT_THROTTLE_RATES': {
        'anon': '100/day',
        'user': '1000/min'
    }
}
  • 中指定throttling:
from rest_framework.throttling import AnonRateThrottle

class ProductListViews(generics.ListAPIView):
    """
    产品列表
    """   

    #获取产品的所有对象
    queryset = Product.objects.all()
    #指明使用的序列器类
    serializer_class = ProductListSerializer
    #指定具体权限,允许任何人访问
    permission_classes = (permission.AllowAny)
    #指定匿名用户的访问限制
    throttle_classes = (AnonRateThrottle,)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值