3

我有一个基于旧数据库的身份验证后端。当有人使用该数据库登录并且没有相应的User记录时,我创建一个。我想知道是否有某种方法可以提醒 Django 系统注意这一事实,例如,我可以将全新的用户重定向到不同的页面。

我唯一能想到的就是在用户的个人资料记录中添加一个标志,称为类似的东西is_new,测试一次,然后False在重定向后立即设置为。

基本上,我想知道其他人是否已经解决了这个问题,所以我不必重新发明轮子。

4

3 回答 3

1

我知道有两种方法可以确定是否已创建对象:

1)当使用get_or_create元组时,返回的形式(obj, created)created一个布尔值,足以清楚地表明对象是否被创建

2)post_save信号传递一个created参数,也是一个布尔值,也表明对象是否被创建。

在最简单的级别上,您可以使用这两个钩子中的任何一个来设置会话变量,然后您可以相应地检查和重定向。

如果你能过得去,你也可以在调用后get_or_create或在post_save信号中直接重定向。

于 2011-05-11T21:13:53.950 回答
1

我发现完成此操作的最简单方法是完全按照您所说的进行。我对我的一个项目有类似的要求。我们需要向任何新成员显示“不要忘记更新您的个人资料”消息,直到他们第一次访问他们的个人资料。客户想要它快点,所以我们在用户的个人资料中添加了一个“visited_profile”字段,并将其默认为 False。

We settled on this because it was super fast to implement, didn't require tinkering with the registration process, worked with existing users, and didn't require extra queries every page load (since the user and user profile is retrieved on every page already). Took us all of 10 minutes to add the field, run the South migration and put an if tag into the template.

于 2011-05-11T23:58:26.910 回答
-1

您可以使用基于文件的缓存来存储尚未保存到数据库的用户。当用户第二次登录时,可以查看缓存,找到用户对象,并永久保存到数据库中。

以下是有关 django 缓存的一些信息:http ://docs.djangoproject.com/en/dev/topics/cache/?from=olddocs

PS:不要使用Memcached,因为它会在计算机崩溃或关机的情况下删除所有信息。

于 2011-05-11T23:36:38.020 回答