在Django REST中提供了三个方式权限,达到了可以同时控制用户认证,用户访问权限,和不同用户可访问次数的问题。具体方式如下:
认证是在视图类运行之前执行的。只有在确定用户的身份之后才涉及到权限控制和节流控制。
如果没有认证,那么:
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认证之后注意的地方:
Permissions是在认证之后才执行的,它确定的是当前的用户有没有权限访问某些网页,Permissions既可以设置成全局的权限,也可以设置成针对特定网页的权限。
权限的设置种类如下:
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控制的是用户可以向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'
}
}
2.在具体视图类中指定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,)