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的文档真的很棒。仔细阅读这本书通常会给你所有你需要的信息。