Question

Comment puis-je créer un GUID en Python qui est la plate-forme indépendante? J'entends il existe une méthode en utilisant ActivePython sous Windows mais il est uniquement Windows parce qu'il utilise COM. Y at-il une méthode en utilisant Python ordinaire?

Était-ce utile?

La solution

  

Le module uuid, dans le python 2.5 ou plus récente, fournit UUID conforme à la RFC   génération. Voir le module docs et la RFC pour plus de détails. [ la source ]

Docs:

Exemple (travail 2 et 3):

>>> import uuid
>>> uuid.uuid4()
UUID('bd65600d-8669-4903-8a14-af88203add38')
>>> str(uuid.uuid4())
'f50ec0b7-f960-400d-91f0-c42a6d44e3d0'
>>> uuid.uuid4().hex
'9fe2c4e93f654fdbb24c02b15259716c'

Autres conseils

Si vous utilisez Python 2.5 ou plus tard, le Module UUID est déjà inclus dans la distribution standard de Python.

Ex:

>>> import uuid
>>> uuid.uuid4()
UUID('5361a11b-615c-42bf-9bdb-e2c3790ada14')

Copié de: https://docs.python.org/2/library/uuid.html (Étant donné que les liens affichés ne sont pas actifs et ils gardent la mise à jour)

>>> import uuid

>>> # make a UUID based on the host ID and current time
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')

>>> # make a UUID using an MD5 hash of a namespace UUID and a name
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

>>> # make a random UUID
>>> uuid.uuid4()
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')

>>> # make a UUID using a SHA-1 hash of a namespace UUID and a name
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')

>>> # make a UUID from a string of hex digits (braces and hyphens ignored)
>>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')

>>> # convert a UUID to a string of hex digits in standard form
>>> str(x)
'00010203-0405-0607-0809-0a0b0c0d0e0f'

>>> # get the raw 16 bytes of the UUID
>>> x.bytes
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

>>> # make a UUID from a 16-byte string
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')

Je l'utilise comme GUIDs clés aléatoires pour les opérations de type base de données.

La forme hexadécimale, avec les tirets et des caractères supplémentaires semblent inutilement long pour moi. Mais j'aime aussi que les chaînes représentant des nombres hexadécimaux sont très sûrs en ce sens qu'ils ne contiennent pas de caractères qui peuvent causer des problèmes dans certaines situations telles que « + », « = », etc ..

Au lieu de hexadécimal, j'utilise une chaîne base64-safe url. Ce qui suit ne se conforme pas aux spécifications UUID / GUID bien (autre que d'avoir la quantité nécessaire de hasard).

import base64
import uuid

# get a UUID - URL safe, Base64
def get_a_uuid():
    r_uuid = base64.urlsafe_b64encode(uuid.uuid4().bytes)
    return r_uuid.replace('=', '')

Cette fonction est entièrement configurable et génère uid unique basé sur le format spécifié

par exemple: - [8, 4, 4, 4, 12], c'est le format mentionné et il va générer l'UUID suivant

  

LxoYNyXe-7hbQ-caJt-DSdU-PDAht56cMEWi

 import random as r

 def generate_uuid():
        random_string = ''
        random_str_seq = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
        uuid_format = [8, 4, 4, 4, 12]
        for n in uuid_format:
            for i in range(0,n):
                random_string += str(random_str_seq[r.randint(0, len(random_str_seq) - 1)])
            if n != 12:
                random_string += '-'
        return random_string

Si vous devez passer UUID pour une clé primaire pour votre modèle ou d'un champ unique, alors le code ci-dessous renvoie l'objet UUID -

 import uuid
 uuid.uuid4()

Si vous devez passer UUID comme paramètre pour l'URL que vous pouvez faire comme ci-dessous le code -

import uuid
str(uuid.uuid4())

Si vous voulez la valeur hexadécimale pour un UUID vous pouvez le faire ci-dessous le un -

import uuid    
uuid.uuid4().hex
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top