Как я могу зашифровать url в Django Rest Framework?

Я нашел документацию, но она не работает с обновленной версией python, поэтому у меня такая проблема. Я хочу предотвратить отбраковку из моего приложения. Есть несколько api, куда я передаю конфиденциальные данные, и мой api endpoing выглядит как localhost:8000/api/products/1, но я хочу, чтобы этот url был следующим localhost:8000/api/products/dheudhuehdeidiwf4yfg4gfy4yf4f4fu4f84j4i this. Так какую процедуру я должен выполнить?

Вы можете использовать uuid как еще один уникальный ключ в вашей модели.

import uuid


class Product(models.Model):
    uuid = models.UUIDField(unique=True, default=uuid.uuid4, editable=False)
    # other fields ...

Для сериализаторов вам придется вручную установить их следующим образом:

class ProductSerializer(serializers.Serializer):
    uuid = serializers.UUIDField(format="hex", read_only=True)
    # other fields ...

    class Meta:
        model = Product
        fields = [
            "uuid",
            # other fields ...
        ]

Для представлений, я предполагаю, вы используете ModelViewSet, поэтому вы можете установить uuid в качестве поля поиска, как:

class ProductViewSet(viewsets.ModelViewSet):
    serializer_class = ProductSerializer
    lookup_field = "uuid"

Одним из способов сделать чувствительные идентификаторы безопасными для urlsafe было бы использование urlsafe_base64_encode из django.utils.http. Вы можете возвращать зашифрованные идентификаторы вместе с ответом на frontend, используя:

uidb64 = urlsafe_base64_encode(force_bytes(имя_модели.pk))

фронтенд может сохранять зашифрованные идентификаторы, и когда запрос делается к вашим конечным точкам с использованием этих идентификаторов, вы расшифровываете их с помощью smart_str из django.utils.encoding следующим образом:

имя_модели_пк = smart_str(urlsafe_base64_decode(uidb64)))

при условии, что ваши конечные точки выглядят примерно так 'api/an-interesting-route/<uidb64>'

Этот подход более полезен для конечных точек GET, которые не просто возвращают модель напрямую, а включают некоторое количество обработки id перед возвращением ответа.

Вернуться на верх