2017-01-20 9 views
1

ich ein Modell in Django haben, die auf diese Weise verwendet uuid:Wie generiert Django Uuid?

uuid = models.CharField(max_length=100, default=uuid.uuid1) 

Die Sache ist, wenn ich zwei Objekte erzeugt werden, eine nach der anderen, ich habe dies:

933e35c4-df1c-11e6-8a53-ace01055799e 

Und dann:

933e35c5-df1c-11e6-8a53-ace01055799e 

von dem, was ich weiß, jeder uuid zufällig generiert wird, aber die Wahrscheinlichkeit einer Kollision sehr gering ist, wie werden sie genau erzeugt wird, wenn ich diese 2 uUID erhalten, sind fast das gleiche? (unterscheidet sich nur in der letzten Nummer des ersten Blocks) und wie wahrscheinlich ist das ?. Gibt es einen sichereren Weg, dies zu tun?

Die Sache ist, dass ich eine Reihe von Clients habe, die jeweils eine eindeutige UUID per E-Mail erhalten, wenn sie nur ein Zeichen ändern und auf die UUID eines anderen Clients zugreifen könnten, was ein Problem wäre.

+0

Es sagt sogar, wie es in der ersten Zeile von Code generiert wird, die Sie zitiert haben: Mit der 'uuid.uuid1'-Funktion, deren Code in Ihrer Python-Standardbibliothek vorhanden ist. – Phillip

Antwort

1

Sie verwenden uuid.uuid1, die als Staat docs:

eine UUID von einer Host-ID generieren, Sequenznummer und die aktuelle Zeit.

Sie sollten uuid.uuid4 verwenden, die einen Zufall UUID erzeugt.

1

Es verwendet uuid.uuid1, um es zu tun (das ist Ihr Standardwert). Siehe docs:

Generieren Sie eine UUID aus einer Host-ID, Sequenznummer und der aktuellen Uhrzeit. Wenn kein Knoten angegeben ist, wird mit getnode() die Hardwareadresse abgerufen. Wenn clock_seq angegeben ist, wird es als Sequenznummer verwendet. andernfalls wird eine zufällige 14-Bit-Sequenznummer gewählt.

Es gibt andere Algorithmen, vielleicht uuid4 ist was Sie suchen.