如何在Django中创建基于会话或cookie的用户标识



在我的Django web应用程序中,每个用户在进入之前都必须注册。为了方便起见,我想让新用户先跳过这个过程,在决定创建帐户之前先玩这个应用程序。用户的操作结果被持久化在关系数据库中,所以即使我不想保存他们的身份,我也必须有某种"用户"对象来从一开始就一致地持久化他们的数据。

所以我想,每当一个新用户来到网站,而他没有通过身份验证时,我会在DB中为创建一个假用户,并通过会话/cookie来识别他。

当用户决定创建一个帐户时,"假"用户将被修改以匹配他的注册数据。

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

我不确定这是否是最佳选项,但您可以使用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,这样就可以解决这个问题。

最新更新