在django中注册或登录后,保存匿名用户数据并与用户映射



你好,我有一个应用程序,用户来了,他会得到项目列表,他可以选择任意数量的项目,然后点击"添加到购物车",在那里他可以重定向到页面,在那里可以看到所选项目和总价,现在继续,我希望用户登录或注册,在他登录或注册后,他会得到他选择的项目和价格的地图,数据会保存在数据库中。我有一个非常适合登录用户的应用程序,但我希望它适用于先选择项目,然后进行注册/登录的匿名用户。

models.py
class UserSelectTest(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
testselected = models.TextField()
class UserTest(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=255)
email = models.EmailField()
number = models.IntegerField()
location = models.CharField(max_length=255)
time = models.IntegerField()
totalprice = models.CharField(max_length=255,null=True)
test_submitted = models.BooleanField()
views.py 
def ResultTest(request):
var = request.POST.get('selectedTests')
abc = UserSelectTest()
abc.user = request.user
abc.testselected = request.POST['selectedTests']
abc.save()

def PostTest(request):
if request.method == 'POST':
test = UserTest()
test.user = request.user
test.name = request.POST['name']
test.email = request.POST['email']
test.number = request.POST['number']
test.location = request.POST['location']
test.time = request.POST['time']
test.totalprice = request.POST['price']
test.test_submitted = True
test.save()

我认为我有两个功能,其中"ResultTest"存储用户选择的项目和总价,另一个视图"PostTest"存储额外的数据。这些功能非常适合已经登录的用户。现在,我正在尝试使用相同的工作流程匿名用户。

最简单的方法是将用户的会话id存储到您的购物车模型中,我假设它是UserSelectTest。你可以在那里添加一个字段

session_id = models.CharField(max_length=32, null=True)

此外,您还可以更改用户字段,以允许未注册用户使用null值。

user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)

在您的面纱中,您可以从request.session.session_key获取任何用户的会话id。您使用该密钥存储未注册用户的购物车值。当用户注册时,只需更新与其session_id匹配的用户的user字段(如果有的话(。

相关内容

最新更新