Django 在详图管线上使用权限类

Django 在详图管线上使用权限类,django,django-rest-framework,Django,Django Rest Framework,如何仅将权限类应用于详图管线 class EventViewSet(viewsets.ModelViewSet): @detail_route(methods=['post']) def messages(self, request, pk=None): ### Check a permissions class. ... 更新-1 从DRF 3.8开始,detail\u-routedecorator已替换为actiondecorator cl

如何仅将权限类应用于详图管线

class EventViewSet(viewsets.ModelViewSet):

    @detail_route(methods=['post'])
    def messages(self, request, pk=None):
        ### Check a permissions class.
        ...
更新-1 从DRF 3.8开始,
detail\u-route
decorator已替换为
action
decorator

class EventViewSet(viewsets.ModelViewSet):
    @action(permission_classes=[permissions.PermissionClass_], methods=['post'])
    def messages(self, request, pk=None):
        # your view code
原职 基本上可以通过以下操作添加权限:

class EventViewSet(viewsets.ModelViewSet):
    @detail_route(
        permission_classes=[
            permissions.PermissionClass_],
        methods=['post'])
    def messages(self, request, pk=None):
        ### Check a permissions class.
        ...

如果在视图集中的自定义操作中存在权限类问题,请尝试在操作中使用此装饰器。可能最新的Django Rest框架没有考虑权限。这种情况的解决方案是在每次定制操作开始时亲自检查,或使用以下装饰器:

def check_permissions(fun):
    def ref(self, request, pk=None):
        obj = get_object_or_404(self.get_queryset(), pk=pk)
        self.check_object_permissions(self.request, obj)

        return fun(self, request, pk)

    return ref

在django rest 3.8中,细节路由被弃用,取而代之的是动作路由 所以现在看起来像这样

from rest_framework.decorators import api_view, permission_classes

class EventViewSet(viewsets.ModelViewSet):

    @action(
        methods=['post'],
        detail=True,
        permission_classes=[YourPermission]
        url_path='messages')
    def messages(self, request, pk=None):
        return Response("200", status=200)

嘿,我有个问题。在此场景中,此方法的URL将为/Events/messages?你可以把它贴上去吗?此外,它是否必须接受self、request和pk=None?此方法的URL将是
/{prefix}/{id}/messages
。是的,你可以发布到它。DRF的文档真的很棒。仔细阅读这本书通常会给你所有你需要的信息。