在我的Django网络应用程序中,每个用户必须在进入之前注册。为了方便起见,我想让新手跳过这个过程,并在他们决定创建一个帐户之前使用该应用程序。用户的操作结果会保留在关系数据库中,因此即使我不想保存其身份,我也必须拥有某种“用户”对象,以便从一开始就始终保持其数据。
所以我认为每当有新用户访问该网站且未经过身份验证时,我都会在数据库中创建一个假用户,并通过会话/ cookie识别他。
当用户决定创建帐户时,将修改“假”用户以匹配其注册数据。
如何以及何时创建此类用户?这是一个好方法吗?
答案 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
,这样可以解决该问题。