Объяснение задачи на Django REST framework

Здраствуйте. У меня вопрос специфичного характера. Есть ТЗ (взято для тренировки) с использованием Django REST framework, понятно что именно требуется, но мне не понятна реализация.

https://github.com/avito-tech/mi-trainee-task - само ТЗ

Я знаю как реализовывать подобное на чистом Django, но не имею представления как правильно это сделать с использованием DRF. Хотелось бы увидеть подробности, можно даже без решения

P.s смотрел пояснение работы с DRF на YouTube selfedu, читал документацию, прочел Django for apis, понятен принцип работы, базовые вещи, как: сериализаторы, представления, и д.р , сама проблема с методами участвующих в работе и структуре, как правильно и в каком порядке что выполнять

Код:

# Представление для шифровки
class GeneratePageAPIView(CreateAPIView):
    serializer_class = SetGenerateCode
    queryset = SecretKey.objects.all()

# Представление для чтения код-фразы и выдачи сообщения
class GetSecretAPIView(APIView):
    def get(self, request, secret_key):
        serializer = GetSecretSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        secret = get_object_or_404(SecretKey, id=secret_key)
        code = serializer.validated_data['code']
        if secret.code == code:
            serializer = SecretSerializer(data=secret)
            return Response(serializer.data)

# Серелизатор создающий запись в БД
class SetGenerateCode(serializers.ModelSerializer):
    class Meta:
        model = SecretKey
        fields = ('code', 'phrase', 'TTL', )

# Сериализатор должен принимать на вход фразу, и если совпала - отдать сообщение
class GetSecretSerializer(serializers.ModelSerializer):
    class Meta:
        model = SecretKey
        fields = ('code', )

# Главная модель
class SecretKey(models.Model):
    code = models.TextField(null=False, blank=False)
    phrase = models.CharField(null=False, blank=False, max_length=20)
    code_phrase = models.TextField(null=False, blank=False)
    TTL = models.PositiveIntegerField(default=3600)
Вернуться на верх