拒绝某些用户的一些POST

时间:2016-07-06 10:19:30

标签: django django-rest-framework

这应该是一个非常简单的问题,但我一直在从DRF文档中提取空白。

models.py:

class DataPoint(models.Model):
    value = models.IntegerField()
    ...

serializers.py:

class DataPointSerializer(serializers.ModelSerializer):
    class Meta:
        model = DataPoint
        fields = ('value', ...)

views.py:

class DataPointViewSet(viewsets.ModelViewSet):
    queryset = DataPoint.objects.all()
    serializer_class = DataPointSerializer
    permission_classes = [permissions.IsAuthenticated, ]
    ...

我希望每个登录用户都能够对此视图集进行GET和POST。唯一的限制是,非员工用户需要将值保持在100以下,如下所示:

if request.data['value'] > 100 and not request.user.is_staff:
    raise PermissionDeniedValidationErrorWhatareyoudoing("Santaz gonna know")

我的问题归结为:
这是自定义验证器或权限的作业吗?

权限问题是DRF(特别是mixins.CreateModelMixin)会愉快地保存POSTed数据而不检查权限。仅在稍后查阅权限(调用get_object()时,AFAICS)。

验证器的问题在于他们无法访问request,尝试在request注入似乎有点过分。

我错过了什么?

P.S。

同样的限制也应适用于PUTPATCH

1 个答案:

答案 0 :(得分:1)

  

这是自定义验证器或权限的作业吗?

这是一项验证工作。

验证者可以通过DiscCode = string.Join(", ", discs.Select(d => (string)d["@Code"])) 方法访问常规上下文。见using set_context