如何在Django中创建基于会话或cookie的用户身份?

时间:2015-11-11 14:52:41

标签: django cookies

在我的Django网络应用程序中,每个用户必须在进入之前注册。为了方便起见,我想让新手跳过这个过程,并在他们决定创建一个帐户之前使用该应用程序。用户的操作结果会保留在关系数据库中,因此即使我不想保存其身份,我也必须拥有某种“用户”对象,以便从一开始就始终保持其数据。

所以我认为每当有新用户访问该网站且未经过身份验证时,我都会在数据库中创建一个假用户,并通过会话/ cookie识别他。

当用户决定创建帐户时,将修改“假”用户以匹配其注册数据。

如何以及何时创建此类用户?这是一个好方法吗?

1 个答案:

答案 0 :(得分:1)

我不确定这是否是最佳选择,但您可以使用AbstractBaseUser并向用户添加session_id。您必须使其他字段不是必需的,例如用户名和密码。然后你可以做这样的事情:

from django.contrib.auth import login
from .models import MyUser

def home_view(request):
    if not request.user.is_authenticated():  # user not logged in
       user, is_new = MyUser.objects.get_or_create(session_id=request.session.session_key)  # Make or get the user
       login(request, user)  # Log them in
    ###

这应该将session_id绑定到用户,如果该用户第二次访问该站点,它将保留其先前的信息而不是为他们创建新用户。您可能会以这种方式获得大量孤立用户,例如,当某人退出时,当他们重新访问该网站时,他们将创建一个新用户,然后以真实帐户登录。您可以在session_id的删除时禁用级联,以便用户在注销时不会被删除。您也可以将session_id设置为None,这样可以解决该问题。