我正在尝试实现(我认为)一个非常简单的计数器数据模型:
class VisitorDayTypeCounter(models.Model):
visitType = models.CharField(max_length=60)
visitDate = models.DateField('Visit Date')
counter = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
当有人通过时,它将查找与visitType和visitDate匹配的行; 如果此行不存在,则将使用counter = 0创建.
然后我们增加计数器并保存.
我担心的是这个过程完全是一场竞赛.两个请求可以同时检查实体是否存在,并且它们都可以创建它.在读取计数器并保存结果之间,另一个请求可能会通过并递增(导致计数丢失).
到目前为止,我还没有找到一个很好的方法,无论是在Django文档还是在教程中(实际上,看起来教程在投票部分有竞争条件).
我该如何安全地做到这一点?
我是版本控制的强力支持者,我正在开始研究Django项目.我以前做了一些,并尝试了一些不同的方法,但我还没有找到一个体面的结构,我真的觉得舒服.
这就是我想要的:
a)将源代码签入版本控制
b)最好不要将环境检入版本控制(类似于buildout或pip requirements.txt适用于设置环境)
c)一个合理的"让新开发者开始"的故事
d)合理的部署故事 - 最好是整个部署环境可以由服务器上的脚本生成
在我看来,之前有人必须这样做,但是许多小时的搜索都导致半生不熟的解决方案并没有真正解决所有这些问题.
关于我应该在哪里看的任何想法?