Quiero utilizar hashes únicos para cada modelo en lugar de identificadores.Generar hashes únicos para los modelos de django
Implementé la siguiente función para usarla fácilmente en todos los ámbitos.
import random,hashlib
from base64 import urlsafe_b64encode
def set_unique_random_value(model_object,field_name='hash_uuid',length=5,use_sha=True,urlencode=False):
while 1:
uuid_number = str(random.random())[2:]
uuid = hashlib.sha256(uuid_number).hexdigest() if use_sha else uuid_number
uuid = uuid[:length]
if urlencode:
uuid = urlsafe_b64encode(uuid)[:-1]
hash_id_dict = {field_name:uuid}
try:
model_object.__class__.objects.get(**hash_id_dict)
except model_object.__class__.DoesNotExist:
setattr(model_object,field_name,uuid)
return
Estoy buscando comentarios, ¿cómo podría hacerlo? ¿Cómo puedo mejorarlo? ¿Qué es bueno, malo y feo?
¿Podría aclarar por favor: ¿Necesita hashes aleatorios o hashes únicos a través del tiempo y el espacio? Lo pregunto porque a menudo los usuarios solo quieren lo primero, pero usan los términos "único" y "aleatorio" de manera intercambiable. – nikola
¿Podría publicar una actualización de cómo lo arregló? Estoy buscando una solución. – Thomas
Es una locura generar una identificación única. Si haces uuid simplemente generas un uuid y no cambias la longitud ni nada. Configure su modelo para usar ese campo como la clave principal. Simplemente genere un uuid en guardar, ni siquiera se preocupe por las colisiones. – dalore