权限Permissions
DRF权限
权限控制可以限制用户对于视图的访问和对于具体数据对象的访问。
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,) ...
提供的权限
-
-
IsAuthenticated 仅通过认证的用户
-
IsAdminUser 仅管理员用户
-
from rest_framework.authentication import SessionAuthentication from rest_framework.permissions import IsAuthenticated from rest_framework.generics import RetrieveAPIView class BookDetailView(RetrieveAPIView): queryset = Book.objects.all() serializer_class = BookSerializer authentication_classes = [SessionAuthentication] permission_classes = [IsAuthenticated]
如需自定义权限,需继承rest_framework.permissions.BasePermission父类,并实现以下两个任何一个方法或全部
-
是否可以访问视图, view表示当前视图对象
-
.has_object_permission(self, request, view, obj)
例如:
class MyPermission(BasePermission): def has_object_permission(self, request, view, obj): """控制对obj对象的访问权限""" return False class BookViewSet(ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer permission_classes = [IsAuthenticated, MyPermission]
本文作者:wang_longan
本文链接:https://www.cnblogs.com/longan-wang/p/15179196.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步