2016-06-01 18 views
0

Ich habe ein kleines Problem damit herauszufinden, wie man benutzerfreundliche Links zu Produkten für die Freigabe generiert.Gemeinsame URL-Generierung von uuid4?

Ich verwende derzeit /product/{uuid4_of_said_product} Das funktioniert ganz gut - aber es ist ein bisschen benutzerunfreundlich - es ist irgendwie lang und hässlich.

Und ich möchte nicht und ID verwenden, da es Benutzern erlauben würde, Produkte zu "erraten". Nicht, dass das zu wichtig wäre - ich würde es gerne vermeiden.

Haben Sie Hinweise dazu, wie Sie eindeutige, benutzerfreundliche, kurze URLs für die Freigabe erstellen, die auf der eindeutigen Element-ID oder UUID basieren?

+0

Sind [Schnecken] (https://pypi.python.org/pypi/django-autoslug) angemessen für Ihren Anwendungsfall? – raphv

+0

Versuchen Sie, nach Base62 Encoder/Decoder-Bibliotheken zu suchen. Immer noch raten, aber viel kürzer. – Selcuk

+0

Grüße raphv - ja Slugs sind keine Möglichkeit, da die fraglichen Gegenstände keinen Titel/Namen oder irgendetwas haben, das slugified werden kann. Ich entschuldige mich für das Vergessen, dies von Anfang an zu erwähnen. Ich werde in diese Selcuk schauen - danke. Ich dachte nicht an eine einfache Base 64 Codierung zu untersuchen. Wie dumm von mir. –

Antwort

1

Als Seluck schlug ich mit Base64-Codierung und Decodierung gehen entschieden:

Im Modell meine „link“ Eigenschaft wird jetzt von der Norm gebaut url + base64.urlsafe_b64encode(str(media_id))

Das uRL-Muster ich verwende das base64 Muster übereinstimmen:

base64_pattern = r'(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'

Und schließlich in der Ansicht wir die ID dekodieren die richtigen Daten zu laden: media_id = base64.urlsafe_b64decode(str(media_id))

media = Media.objects.get(pk=media_id)