2017-01-20 121 views
1

我在Django使用的uuid這樣一個模型:Django如何生成uuid?

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

的事情是,當我產生2個對象,一前一後,我得到這個:

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

然後:

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

從我所知道的每一個UUID是隨機產生的,但碰撞的概率是非常低的,怎麼當我拿到這2個UUID是他們究竟產生差不多一樣? (它僅在第一個區塊的最後一個數字上有所不同)以及這可能性如何?有沒有更安全的方法來做到這一點?

問題是我有一組客戶端,每個客戶端都可以通過電子郵件獲得唯一的uuid,如果他們可以更改一個字符並獲得另一個客戶端的uuid,那將會是一個問題。

+0

它甚至會說明它是如何在您引用的第一行代碼中生成的:使用其代碼存在於Python標準庫中的'uuid.uuid1'函數.. – Phillip

回答

1

您使用uuid.uuid1,其作爲文檔狀態:

生成從主機ID,序列號,以及當前時間的UUID。

您應該使用uuid.uuid4,生成一個隨機UUID

1

它使用uuid.uuid1來做到這一點(這是您的默認值)。請參閱docs

從主機ID,序列號和當前時間生成UUID。 如果沒有給出節點,則使用getnode()來獲取硬件地址( )。如果給出clock_seq,它將用作序列號;否則選擇一個隨機的14位序列號。

還有其他算法,也許uuid4是你在找什麼。