【问题标题】:Limit access api view decorator Django through post method通过post方法限制访问api视图装饰器Django
【发布时间】:2016-09-24 08:06:45
【问题描述】:

我创建了一个名为“Experts”的用户组,并且我也安装了 Django 的 rest_framework。我可以通过 api 访问我的项目和所有项目的 cmets。好吧,我应该将通过 api 的 post 操作限制为 cmets。此操作仅对专家的用户可用。我的views.py中有以下代码(我只是发布重要代码):

from .serializers import FeedbackSerializer
class FeedbackViewSet(viewsets.ModelViewSet):
            """
            API endpoint that allows Items to be viewed or edited.
            """
            queryset = Feedback.objects.all().order_by('user')
            serializer_class = FeedbackSerializer
            def create(self, request, *args, **kwargs):
               self.permission_classes = ['IsAdminUser',]
               return super(FeedbackViewSet, self).create(self, request, *args, **kwargs)

我正在查看有关restful api的官方文档,但我不明白如何使用(@api_view('POST'),@permission_classes((IsAdminUser, )))覆盖通过api调用的方法以显示所有cmets

【问题讨论】:

  • ViewSet 有多个动作,你应该覆盖你需要的那个:django-rest-framework.org/api-guide/viewsets 也许你只做一个 POST 端点会更容易,而不是声明一堆不需要的 ViewSet 代码。
  • 嗯,但是我应该在这个类中编写FeedbackViewSet的create方法吗?或者有什么办法可以覆盖它?对不起,如果这是一个愚蠢的问题,但我是 Django 的新手

标签: python django django-rest-framework restful-authentication


【解决方案1】:
class MyViewset(ModelViewSet):
    queryset = MyThing.objects.all()
    serializer_class = MyThingSerializer

    def update(self, request, pk=None, **kwargs):
        self.permission_classes = [CustomPermission,]

        return super(MyViewset, self).update(request, pk, **kwargs)

【讨论】:

  • 感谢您的回复。我将您的代码插入我的班级并将“CustomPermission”替换为“IsAdminUser”,因为我希望在用户属于员工时允许发布。 cmets 显示正确,但如果我尝试通过 api 与非工作人员添加反馈,则会添加反馈
  • 你也可以覆盖create方法:def create(self, request, *args, **kwargs):
  • 好的,我也在这里更新了我的代码。但是现在当我尝试发布新的反馈时,我收到了以下错误:AttributeError at /api/comments/ 'FeedbackViewSet' object has no attribute 'data'
  • 也许这个解决方案更好?抱歉,我实际上无法测试任何代码 atm:stackoverflow.com/questions/35970970/…
  • 谢谢您的先生,这是我的错。我忘记了从权限中导入 isadminuser,现在它正在工作。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 2012-09-19
  • 2018-12-24
  • 2023-03-25
  • 2014-12-05
  • 1970-01-01
相关资源
最近更新 更多