一旦用户注册(Django),我如何保留会话信息



当创建新用户时,我想保留其会话中的某些信息

例如。用户已在其会话中存储的东西,一旦注册(或登录),我想使用的内容。

我将在用户模型(或auth登录信号)上使用postrongave信号,但看来信号不会将请求或会话放入发送的信号中。看来我也不容易从用户那里获得会话。

我正在使用django 1.4

编辑:让我举一个例子。

问题可以归结为这 - 我可能想在登录之前保留信息的信息,但是在登录之前我在哪里存储此信息?一个好地方将是一个会话(或者我可以使用DB 中的数据链接到 ,使用会话有点像临时用户)。

在任何情况下,直到他们登录,我就可以像用户凭据一样使用他们的会话,并且只要他们的cookie都可以存储持续的信息(我还能可靠地跟踪匿名用户?)。

但是,一旦他们注册(或登录),我想将该信息从会话正确地转移到帐户中。一个很好的理由是,定期从匿名用户中删除数据是有意义的,而注册用户的数据将被持续。

为此,我只想从处理程序到新用户信号访问会话(可以通过请求),这样我就可以从会话中的数据中进行一次性传输。但是新用户信号不容纳会话(或请求)。

如果您使用的是django.contrib.sessionsdjango.contrib.auth作为作业,则应在登录后自动保留会话数据。

此外,user_logged_in信号实际上是发送的。

编辑:

因此使用user_logged_in信号。它带有请求。选择一些特定的键来存储未经身份验证的用户数据(例如"_anonymous_data")。如果该键是在Handeling信号时在request.session上设置的,则只需在request.user.get_profile()对象上重写数据,请致电savedel request.session["_anonymous_data"]

重述的代码可能看起来像:

if request.user.is_authenticated():
    user_data = request.user.get_profile()
else:
    user_data = requerst.session["_anonymous_data"]

当然只是划痕。您不想在视图中使用硬码会话键或编写此类逻辑。如果需要宽范围的应用程序,请将其嵌入在__init__中的某些抽象类中。

您可以尝试使用会话:

https://docs.djangoproject.com/en/dev/topics/http/sessions/?from=olddocs

最新更新