在进程a中的事务提交之前,“进程B”验证从“进程a”传递的身份验证时,也遇到了类似的问题:
为了解决这个问题我需要Token.objects.get_或_create(user=user)调用以在其自己的事务中提交,无论是否已经有一些周围的事务正在进行。我想你的问题也有同样的问题。在
我使用了一个单独的数据库连接来处理令牌。因此,在设置中:DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'mydbuser',
'PASSWORD': DBPASSWORD}}
DATABASES['security'] = DATABASES['default'] # allow independent security transactions/connections
DATABASE_ROUTERS = ['security.db_router.SecurityRouter']
路由器确保令牌模型在“安全”数据库中处理。您可以将路由器放在您喜欢的地方,并使用上面的路由器设置链接它:
^{pr2}$
现在令牌对象的所有使用都发生在“security”数据库中。因此,用户令牌是在独立于您的“默认”数据库事务的事务中创建的,它是即时的,就像所有的django连接一样(除非您另有指定)。在