Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database django原子行动_Database_Django_Transactions_Counter_Atomic - Fatal编程技术网

Database django原子行动

Database django原子行动,database,django,transactions,counter,atomic,Database,Django,Transactions,Counter,Atomic,我最近更新了django 1.4,并解决了一些问题 最近的是原子操作 由于某些原因,当单击链接时,视图会被调用两次。这已通过开发服务器上的打印语句进行了验证 例如: def link_createNewNumber(self, request, obj=None): print "*** createNewNumber Called ***" number = numbers.objects.filter(id=obj) if len(number) =

我最近更新了django 1.4,并解决了一些问题

最近的是原子操作

由于某些原因,当单击链接时,视图会被调用两次。这已通过开发服务器上的打印语句进行了验证

例如:

   def link_createNewNumber(self, request, obj=None):
      print "*** createNewNumber Called ***"
      number = numbers.objects.filter(id=obj)
      if len(number) == 1:
         print "Exists, just redirect to new page"
         # ResponseRedirect here...
      elif len(number) == 0:
         # Code to create new entry
         print "Saved new database entry"
         # ResponseRedirect here...
现在我偶然发现了交易,这似乎是我所需要的。但是,即使在将事务中间件添加到settings.py之后:

...
'django.middleware.transaction.TransactionMiddleware',
...
和@transaction.commit_on_success到函数开始:

@transaction.commit_on_success
def link_createNewNumber(self, request, obj=None):
...
我通常会简化以下输出:

*** createNewNumber Called ***

*** createNewNumber Called ***

Saved new database entry

Saved new database entry

我被难住了,因为这一切在1.2.3中都可以正常工作。问题的核心似乎是选择链接时的双重执行

有趣的是,在地址栏中手动输入URL不会导致视图函数被调用两次。。。网页中的URL是:注意到上面关于直接输入URL的行为后,我可以跟踪双重调用的问题。这是一个问题,尾随斜杠导致重定向到同一url,而不会导致代码执行两次。然而,虽然这解决了我的问题,但我认为关于交易的问题仍然有效。