2017-04-21 1 views
0

comment chiffrer et déchiffrer pk d'url django sans utiliser package fondamentalement j'ai une URL commeComment chiffrer pk à partir de l'URL django sans utiliser de paquet?

example.com/update/1 

où pk = 1

je veux chiffrer le pk comme pk 1 = 345345435cgsfd2asdfaas

+0

ok essayez de créer votre propre fonction – stone

+0

Si vous ne voulez pas d'identifiants numériques, vous pouvez utiliser [UUIDFields] (https://docs.djangoproject.com/fr/1.11/ref/models/fields/#uuidfield) pour votre clé primaire de modèle. –

+0

Vous pouvez également utiliser un autre champ (si unique = Vrai) de votre modèle dans l'URL si vous ne voulez pas exposer le pk – dentemm

Répondre

4

Il n'y a pas de méthode inbuld, pour ce faire, je pense, mais en utilisant TimestampSigner, vous pouvez effectuer les opérations suivantes:

En utilisant TimestampSigner, vous pouvez chiffrer votre PK, et décrypter plus tard lorsque vous voulez la chaîne d'origine.

>>> from datetime import timedelta 
>>> from django.core.signing import TimestampSigner 
>>> signer = TimestampSigner() 
>>> value = signer.sign(str(pk)) # encrypt the PK. 
>>> value 
'1:1NMg5H:oPVuCqlJWmChm1rA2lyTUtelC-c' 
>>> value = value.replace(pk,"") # doing this because, it append the original primary key + encrypted string. 
>>> value # use this PK to show in the URL. 
'1NMg5H:oPVuCqlJWmChm1rA2lyTUtelC-c' 
>>> repack = "{}:{}".format(pk,value) # When you want back the original PK, add the PK + encrypted string. 
>>>repack 
'1:1NMg5H:oPVuCqlJWmChm1rA2lyTUtelC-c' 
>>> signer.unsign(repack) # decrypt the PK. 
'1' 

Espérons que ce sera utile pour vous.

+0

mais comment puis-je décrypter le pk en vue –

+0

J'ai mis à jour le code, vous pouvez le faire en utilisant '.unsign () 'méthode. détails ici: https://docs.djangoproject.com/fr/1.10/topics/signing/#using-the-low-level-api – Surajano

+0

mais comment passer le pk crypté à mon URL dans urls.py –