2

创建新用户时,我想在他们的会话中保留一些信息

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

我会在用户模型上使用 post_save 信号(或 auth 登录信号),但似乎这些信号没有将请求或会话放入发送的信号中。似乎我也不能轻易地从用户那里获得会话。

我正在使用 Django 1.4

编辑:让我举个例子。

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

无论如何,在他们登录之前,我可以像使用用户凭据一样简单地使用他们的会话,并存储只要他们的 cookie 存在就一直存在的信息(我还能如何可靠地跟踪匿名用户?)。

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

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

4

2 回答 2

3

如果您正在使用django.contrib.sessionsdjango.contrib.auth工作,则会话数据应在login后自动保留。

而且,user_logged_in信号实际上是随请求一起发送的。

编辑:

所以使用user_logged_in信号。它携带请求。选择一些特定的密钥来存储未经身份验证的用户数据(例如"_anonymous_data")。如果在处理信号时将该键设置为打开request.session,只需在request.user.get_profile()对象上重写数据,调用savedel request.session["_anonymous_data"]

The code to retreive it could look something like:

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

It's only a scratch of course. You don't want to hardcode session keys or write such logic in views. If you need it application wide, embed it in some abstraction class which takes request in __init__.

于 2012-10-23T09:20:24.917 回答
-1

您可以尝试使用会话:

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

于 2012-10-22T22:37:21.223 回答