Как реализовать Hesh Id в Djnago RESTFRAMEWORK?
Я пытаюсь скрыть id своих объектов, но не знаю, как это правильно реализовать. Я сделал следующее:
hashids = Hashids(settings.HASHIDS_SALT, min_length=32)
def parse_result(result) -> Union[int, None]:
if result:
if isinstance(result[0], int):
return result[0]
try:
result = int(result[0])
return result
except Exception as error:
print("Couldn't parse the decodification!")
print(error)
def h_encode(id: int):
return hashids.encode(id)
def h_decode(h: str) -> Union[int, None]:
return parse_result(hashids.decode(h))
class HashIdField(serializers.CharField):
def to_representation(self, value):
value = h_encode(value)
return super(HashIdField, self).to_representation(value)
def to_internal_value(self, data):
data = h_decode(data)
return int(super(HashIdField, self).to_internal_value(data))
class ProducerSerializer(serializers.HyperlinkedModelSerializer):
id = HashIdField(read_only=True)
class Meta:
model = Producer
view_name = 'api:producer-detail'
fields = (
'id',
'name',)
Хотя это работает, я все еще могу получить доступ к объектам по их целочисленному ID. Обс: Я использую viewset.