python权限框架_Django restframework 框架认证、权限、限流用法示例

本文实例讲述了Django restframework 框架认证、权限、限流用法。分享给大家供大家参考,具体如下:

概述

Django Rest Framework 是一个强大且灵活的工具包,使用Django REST Framework可以在Django的基础上迅速实现API,用以构建Web API。

认证Authentication

可以在配置文件中配置全局默认的认证方案

REST_FRAMEWORK = {

'DEFAULT_AUTHENTICATION_CLASSES': (

'rest_framework.authentication.BasicAuthentication', # 基本认证

'rest_framework.authentication.SessionAuthentication', # session认证

)

}

也可以在每个视图中通过设置authentication_classess属性来设置

from rest_framework.authentication import SessionAuthentication, BasicAuthentication

from rest_framework.views import APIView

class ExampleView(APIView):

authentication_classes = (SessionAuthentication, BasicAuthentication)

...

认证失败会有两种可能的返回值:

401 Unauthorized 未认证

403 Permission Denied 权限被禁止

权限Permissions

权限控制可以限制用户对于视图的访问和对于具体数据对象的访问。

在执行视图的dispatch()方法前,会先进行视图访问权限的判断

在通过get_object()获取具体对象时,会进行对象访问权限的判断

使用

可以在配置文件中设置默认的权限管理类,如

REST_FRAMEWORK = {

'DEFAULT_PERMISSION_CLASSES': (

'rest_framework.permissions.IsAuthenticated',

)

}

如果未指明,则采用如下默认配置

'DEFAULT_PERMISSION_CLASSES': (

'rest_framework.permissions.AllowAny',

)

也可以在具体的视图中通过permission_classes属性来设置,如

from rest_framework.permissions import IsAuthenticated

from rest_framework.views import APIView

class ExampleView(APIView):

permission_classes = (IsAuthenticated,)

...

提供的权限

AllowAny 允许所有用户

IsAuthenticated 仅通过认证的用户

IsAdminUser 仅管理员用户

IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取

举例

from rest_framework.authentication import SessionAuthentication

from rest_framework.permissions import IsAuthenticated

from rest_framework.generics import RetrieveAPIView

class BookDetailView(RetrieveAPIView):

queryset = BookInfo.objects.all()

serializer_class = BookInfoSerializer

authentication_classes = [SessionAuthentication]

permission_classes = [IsAuthenticated]

自定义权限

如需自定义权限,需继承rest_framework.permissions.BasePermission父类,并实现以下两个任何一个方法或全部

.has_permission(self, request, view)

是否可以访问视图, view表示当前视图对象

.has_object_permission(self, request, view, obj)

是否可以访问数据对象, view表示当前视图, obj为数据对象

例如:

class MyPermission(BasePermission):

def has_object_permission(self, request, view, obj):

"""控制对obj对象的访问权限,此案例决绝所有对对象的访问"""

return False

class BookInfoViewSet(ModelViewSet):

queryset = BookInfo.objects.all()

serializer_class = BookInfoSerializer

permission_classes = [IsAuthenticated, MyPermission]

限流Throttling

可以对接口访问的频次进行限制,以减轻服务器压力。

使用

可以在配置文件中,使用DEFAULT_THROTTLE_CLASSES 和 DEFAULT_THROTTLE_RATES进行全局配置,

REST_FRAMEWORK = {

'DEFAULT_THROTTLE_CLASSES': (

'rest_framework.throttling.AnonRateThrottle',

'rest_framework.throttling.UserRateThrottle'

),

'DEFAULT_THROTTLE_RATES': {

'anon': '100/day',

'user': '1000/day'

}

}

DEFAULT_THROTTLE_RATES 可以使用 second, minute, hour 或day来指明周期。

也可以在具体视图中通过throttle_classess属性来配置,如

from rest_framework.throttling import UserRateThrottle

from rest_framework.views import APIView

class ExampleView(APIView):

throttle_classes = (UserRateThrottle,)

...

可选限流类

1) AnonRateThrottle

限制所有匿名未认证用户,使用IP区分用户。

使用DEFAULT_THROTTLE_RATES['anon'] 来设置频次

2)UserRateThrottle

限制认证用户,使用User id 来区分。

使用DEFAULT_THROTTLE_RATES['user'] 来设置频次

3)ScopedRateThrottle

限制用户对于每个视图的访问频次,使用ip或user id。

例如:

class ContactListView(APIView):

throttle_scope = 'contacts'

...

class ContactDetailView(APIView):

throttle_scope = 'contacts'

...

class UploadView(APIView):

throttle_scope = 'uploads'

...

REST_FRAMEWORK = {

'DEFAULT_THROTTLE_CLASSES': (

'rest_framework.throttling.ScopedRateThrottle',

),

'DEFAULT_THROTTLE_RATES': {

'contacts': '1000/day',

'uploads': '20/day'

}

}

实例

from rest_framework.authentication import SessionAuthentication

from rest_framework.permissions import IsAuthenticated

from rest_framework.generics import RetrieveAPIView

from rest_framework.throttling import UserRateThrottle

class BookDetailView(RetrieveAPIView):

queryset = BookInfo.objects.all()

serializer_class = BookInfoSerializer

authentication_classes = [SessionAuthentication]

permission_classes = [IsAuthenticated]

throttle_classes = (UserRateThrottle,)

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值