django - Django Webhook 创建双数据库条目
问题描述
我目前正在使用 Django 为 google Dialogflow 编写 webhook 应用程序。它工作正常,我基本上完成了。由于某种原因,我现在开始遇到各种随机出现的问题,其中最严重的问题之一如下:每当 webhook 执行用户帐户创建调用时,它都会创建一个双数据库条目,这会使程序崩溃(因为我的 .get 突然返回多个元素而不是单个用户)。
我正在使用以下简单模型:
# model to create user entries
class TestUser(models.Model):
name = models.CharField(max_length=200)
userID = models.CharField(max_length=12, blank=True)
registrationDate = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
# model to add watched movies to user
class Movie(models.Model):
username = models.ForeignKey(TestUser, on_delete=models.CASCADE)
title = models.CharField(max_length=200, blank=True)
genreID = models.IntegerField (blank=True)
def __str__(self):
return self.title
def list_genre_id(self):
return self.genreID
发生问题时在我的 webhook 中执行的部分应如下所示:
if action == "account_creation":
selection = req.get("queryResult").get("parameters").get("account_selection")
if selection == "True":
q = TestUser(name=f"{username}", userID=idgen())
q.save()
userID = TestUser.objects.get(name=f"{username}").userID
fullfillmenttext = {"fulfillment_text": "Alright, I created a new account for you! Would you like to add "
"some of your favorite movies to your account?",
"outputContexts": [
{
"name": f"projects/nextflix-d48b9/agent/sessions/{userID}/contexts/create_add_movies",
"lifespanCount": 1,
"parameters": {
"data": "{}"
}
}]}
这是我正在使用的简单 idgen 函数:
def idgen():
y = ''.join(
random.SystemRandom().choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(12))
return y
我正在尝试创建此用户 ID,以便在所有用户的 webhook 调用中拥有唯一的会话 ID。似乎有些事情搞砸了,但我一点也不知道是什么。非常感谢您查看此内容!
解决方案
看来我能够解决这个问题:问题显然是我将以前的 outputContext 的生命周期设置为 2 而不是 1,这导致答案由于某种原因执行了两次 codecell。伙计,dialogflow 真是个糟糕的程序。