Skip to main content
 首页 » 编程设计

python之django rest 框架权限 'isAdminorReadonly'

2025年05月04日22lyj

我只希望管理员向模型添加内容,但任何人都可以阅读。是否有任何现有的权限类可供我使用。或者没有对象级别权限的最佳方法是什么。相同的代码是

class TagList(generics.ListCreateAPIView): 
    serializer_class = TagSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 
    filter_backends = (filters.DjangoFilterBackend,) 
    filter_fields = ('title',) 
    def get_queryset(self): 
        return Tag.objects.all() 

请您参考如下方法:

让我们具体回答您的问题。

  1. 是否有任何现有的权限类可供我使用?

回答:不可以。drf(直到第 3 版)没有提供对管理员的完全访问权限和对任何人(我相信也是匿名的)只读的权限。

  1. 没有对象级权限的最佳方法是什么?

回答:我建议有一个自定义 View 级别的权限,如下所示:

from rest_framework.permissions import IsAdminUser, SAFE_METHODS 
 
class IsAdminUserOrReadOnly(IsAdminUser): 
 
    def has_permission(self, request, view): 
        is_admin = super( 
            IsAdminUserOrReadOnly,  
            self).has_permission(request, view) 
        # Python3: is_admin = super().has_permission(request, view) 
        return request.method in SAFE_METHODS or is_admin