Sé que hay preguntas similares (como this , this , this y this ) pero tengo requisitos específicos y busco una forma menos costosa de hacer lo siguiente (en Django 1.10.2):
Buscando no tener identificadores enteros secuenciales/adivinables en las URL e idealmente cumplir con los siguientes requisitos:
Nota: Es probable que la aplicación tenga alrededor de 5 millones de registros a largo plazo.
Después de investigar muchas opciones sobre SO, blogs, etc., terminé haciendo lo siguiente:
(buenos consejos , publicaciones y especialmente este comentario ayudaron mucho)
Lo que esta solución ayuda a lograr:
Lo que no ayuda a lograr/cualquier inconveniente:
Como referencia, parece que hay varias formas de generar ID aleatorias que descubrí en el camino (como get_random_string de Django, random de Python, UUIDField de Django, etc.) y muchas formas de codificar la ID actual (base 36, base 62, XORing y qué no). La ID codificada también se puede almacenar como otro campo (indexado) y buscar cada vez (como aquí ), pero depende de los parámetros de rendimiento de la aplicación web (ya que buscar una ID de varchar tiene menos rendimiento que buscar una ID de número entero). Este campo de identificador se puede guardar desde la función save() de un modelo sobrescrito, o usando una señal post_save() (ver aquí ) (mientras que ambos enfoques necesitarán que se llame a la función save() dos veces por cada inserción).
Todos los oídos a las optimizaciones del enfoque anterior. Me encanta SO y la comunidad. Siempre hay mucho que aprender aquí.
Actualización: después de más de un año de esta publicación, ¡encontré esta gran biblioteca llamada hashids que hace más o menos lo mismo bastante bien! Está disponible en muchos idiomas, incluido Python .