当创建新用户时,我想保留其会话中的某些信息
例如。用户已在其会话中存储的东西,一旦注册(或登录),我想使用的内容。
我将在用户模型(或auth登录信号)上使用postrongave信号,但看来信号不会将请求或会话放入发送的信号中。看来我也不容易从用户那里获得会话。
我正在使用django 1.4
编辑:让我举一个例子。
问题可以归结为这 - 我可能想在登录之前保留信息的信息,但是在登录之前我在哪里存储此信息?一个好地方将是一个会话(或者我可以使用DB 中的数据链接到 ,使用会话有点像临时用户)。
在任何情况下,直到他们登录,我就可以像用户凭据一样使用他们的会话,并且只要他们的cookie都可以存储持续的信息(我还能可靠地跟踪匿名用户?)。
但是,一旦他们注册(或登录),我想将该信息从会话正确地转移到帐户中。一个很好的理由是,定期从匿名用户中删除数据是有意义的,而注册用户的数据将被持续。
为此,我只想从处理程序到新用户信号访问会话(可以通过请求),这样我就可以从会话中的数据中进行一次性传输。但是新用户信号不容纳会话(或请求)。
如果您使用的是django.contrib.sessions
和django.contrib.auth
作为作业,则应在登录后自动保留会话数据。
此外,user_logged_in
信号实际上是发送的。
编辑:
因此使用user_logged_in
信号。它带有请求。选择一些特定的键来存储未经身份验证的用户数据(例如"_anonymous_data"
)。如果该键是在Handeling信号时在request.session
上设置的,则只需在request.user.get_profile()
对象上重写数据,请致电save
和del 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