Django数据库差异

时间:2013-06-28 09:36:19

标签: django django-models

我有一个基于django的网站,其中包含用户身份验证系统。有一个模型(比如A),其属性文件名必须是唯一的。单击网页上的某个按钮时,其中一个python视图执行以下操作

file=randomNameX()
a=A(filename=file) 
a.save()

def randomStringX(length):
    s = ''
    letters = "0123456789abcdefghijklmnopqrstuvwxyz"
    while len(s) < length:
    s += letters[random.randint(0, len(letters)-1)]
    return s

def randomNameX():
    name = randomString(10)
    while A.objects.filter(filename="_"+name).count() > 0:
    name = randomString(10)
    return name

两个用户(用户1和用户2)是否可能同时生成相同的文件名,并且数据库条目首先发生在用户1上,并且由于该属性是唯一的,因此用户2会引发异常? / p>

如果是,请告诉我如何克服这个问题。

1 个答案:

答案 0 :(得分:0)

您描述的内容称为竞争条件(http://en.wikipedia.org/wiki/Race_condition)。

当前代码是否会发生这种情况取决于“生成随机文件名”的实现,所以只能告诉答案,但避免这种问题的最简单方法是使用一些UUID系统({{ 3}}),无论是标准的还是“自己动手”的解决方案。

鉴于上下文(HTTP请求处理程序),时间戳,请求客户端的IP地址和一些随机内容的组合应足以大大降低此类冲突的可能性。