Хранить IP клиента на модели по запросам в Django restframework - PullRequest
0 голосов
/ 21 февраля 2020

Я хотел бы сохранить IP-адрес моего клиента в моей модели в django restframework. Я не знаю, куда поместить мою функцию и как ее сохранить при создании журнала:

Models.py

class Loglist(models.Model):
"""This class represents the loglist model."""
message = JSONField(null=True)
date_created = models.TimeField(auto_now_add=True)
client_ip = models.GenericIPAddressField(null=True)

def __str__(self):
    """Return a human readable representation of the model instance."""
    return "{}".format(self.client_ip)

Просмотры. py

class CreateView(generics.ListCreateAPIView):
    """This class defined the create behaviour of our rest api."""
    queryset = Loglist.objects.all()
    serializer_class = LoglistSerializer

    def perform_create(self, serializer):
        serializer.save()

class DetailsView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Loglist.objects.all()
    serializer_class = LoglistSerializer

Serializer.py

class LoglistSerializer(serializers.ModelSerializer):
    """Serializer to map the model instance into JSON format."""

    class Meta:
        """Meta class to map serializer's fields with the model fields."""
        model = Loglist
        fields = ('id', 'message', 'date_created', 'client_ip')
        read_only_fields = ('date_created', 'client_ip')

1 Ответ

1 голос
/ 21 февраля 2020

IP-адрес request.user можно найти в request.META.get ('REMOTE_ADDR'). Вы также можете переопределить функцию создания сериализатора, чтобы сохранить IP-адрес пользователя, который создает список регистрации.

class LoglistSerializer(serializers.ModelSerializer):
    """Serializer to map the model instance into JSON format."""

    class Meta:
        """Meta class to map serializer's fields with the model fields."""
        model = Loglist
        fields = ('id', 'message', 'date_created', 'client_ip')
        read_only_fields = ('date_created', 'client_ip')

    def create(self, validated_data):
        validated_data['user'] = self.context.get('request').META.get("REMOTE_ADDR")
        return Loglist.objects.create(**validated_data)
...