django的新UUIDField的'默认'属性是否能够解决这个问题的独特性

Dee*_*eyi 2 python django django-models

刚刚跳入django 1.8进行快速项目,我发现UUIDField模型中有一个.

https://docs.djangoproject.com/en/1.8/ref/models/fields/#uuidfield

我将此用于外部id字段,每个模型都必须公开该对象.将default参数处理的独特性或者我必须把它写在救?我的意思是我知道几乎没有值碰撞的机会,只是知道它是如何在内部完成的

Rah*_*pta 6

UUID模块每次如何保证唯一值?

RFC 4122(UUID模块规范)指定了三种生成UUID的算法:

  1. 使用IEEE 802 MAC地址作为唯一性的来源
  2. 使用伪随机数
  3. 使用众所周知的字符串与加密散列相结合

在所有情况下,种子值与系统时钟时钟序列值组合(以便在时钟向后设置时保持唯一性).因此,根据上述机制生成的UUID将是已经或将要分配的所有其他UUID的唯一.

摘自RFC 4122 摘要:

UUID长128位,可以保证跨空间和时间的唯一性.

注意:由于UUIDS的这种唯一性属性,Django没有在内部检查(如@FlipperPA所述)来检查是否已经存在另一个具有相同对象的对象uuid.


Kev*_*nry 6

Django 不强制 UUID 的唯一性。这是因为 UUID 的主要用例是提供一个可以预期是唯一的标识符,而无需与集中机构(例如数据库,就是这样unique=True做的)进行检查。

(请注意,UUID 不能保证是唯一的,发生冲突的可能性很小。)

如果您愿意的话,您当然可以使用数据库在 UUID 之上强制执行唯一性(通过unique=True在您的字段上进行设置),但我想说这是一种不寻常且难以证明合理的配置。