Django(REST框架):用户未登录时如何检查列

时间:2019-07-17 11:27:35

标签: django django-rest-framework

我使用Django作为CMS,并使用React作为前端。 对于API,我使用的是Django REST框架。

在Django中,我有一个像这样的模型:

class person(models.Model):
    number = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=128)
    last_name = models.CharField(max_length=128)

我想检查一些列,具体取决于用户是否向我发送了正确的身份验证令牌。

因此,我想拥有类似的东西

{ "number": 1, "name": "johnny", "last_name": "miagi"}

验证用户身份后,

{ "number": 1, "name": "johnny", "last_name": "########"}

如果没有。

这可能吗?不幸的是,我是Django的初学者。我了解用户特权系统,但据我所知,它应在完整表而不是列上使用。

2 个答案:

答案 0 :(得分:3)

您可以通过以下方式修改序列化程序来自行检查字段:

class PersonSerializer(serializers.ModelSerializer):

    last_name = serializers.SerializerMethodField('get_last_name')

    class Meta:
        model = Person
        fields = ('__all__')

    def get_last_name(self, obj):
        request = getattr(self.context, 'request', None)
        if not request.user:
            return "########"

通过使用此方法,您还可以通过将条件语句放入last_name方法中来对get_last_name()字段进行用户级审查。

答案 1 :(得分:1)

使2个串行器或在用户登录时在串行器中产生条件,然后使用一个串行器,否则使用另一个串行器。

    class ModelApiView(generics.ListCreateAPIView):
        """
        List of User Model History api
        """


        def get_serializer_class(self):
            if self.request.user is None or self.request.user is Anonymous:
                return serializer_one
            else:
                return serializer_two
        queryset = Model.objects.all()

class serializer_two(serializers.ModelSerializer):

    class Meta:
        model = Model
        fields = "__all__"

class serializer_one(serializers.ModelSerializer):
    field_value = serializers.SerializerMethodField('get_field_value')

    class Meta:
        model = Model
        fields = ('__all__')

    def get_field_value(self, obj):
        return "########"