我使用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的初学者。我了解用户特权系统,但据我所知,它应在完整表而不是列上使用。
答案 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 "########"