2016-06-01 2 views
0

J'ai un peu de mal à trouver comment générer des liens conviviaux vers des produits à partager.Génération d'URL de partage depuis uuid4?

J'utilise actuellement /product/{uuid4_of_said_product} Ce qui fonctionne très bien - mais c'est un peu hostile - c'est plutôt long et moche.

Et je ne souhaite pas utiliser et id car cela permettrait aux utilisateurs de "deviner" les produits. Pas que ce soit trop un problème - je voudrais l'éviter.

Avez-vous des conseils sur la façon de générer des URL de partage uniques, conviviales et à court terme, basées sur l'identifiant unique ou l'uuid?

+0

Are [limaces] (https://pypi.python.org/pypi/django-autoslug) appropriée pour votre cas d'utilisation? – raphv

+0

Essayez de faire une recherche pour les librairies encodeur/décodeur base62. Encore devinable mais beaucoup plus court. – Selcuk

+0

Salutations raphv - Oui, les limaces ne sont pas une possibilité car les objets en question n'ont pas de titre/nom ou tout ce qui peut être slugified. Je m'excuse d'avoir oublié de le mentionner dès le départ. Je vais regarder dans ces Selcuk - merci. Je ne pensais pas à l'investigation d'un simple encodage en base 64. Que je suis bête. –

Répondre

1

Comme Seluck a suggéré que je décidé d'aller avec un encodage base64 et le décodage:

Dans le modèle de ma propriété « lien » est maintenant construit à partir de la norme url + base64.urlsafe_b64encode(str(media_id))

le modèle d'URL que j'utilise pour correspondre au modèle base64:

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

Et enfin dans la vue on décode l'id pour charger les données appropriées: media_id = base64.urlsafe_b64decode(str(media_id))

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