2

我已经使用该UserProfile方法扩展了用户模型。UserProfile matching query does not exist但是我在运行查询时偶尔会收到 Django 错误消息request.user.get_profile()

我认为当我退出系统时会发生这种情况,因此我的用户成为AnonymousUser. UserProfile如果 a不存在,有什么方法可以自动将用户重定向回登录页面。

request.user.get_profile()在很多地方都在使用,所以真的不想通过我的代码对每个人进行检查,所以正在考虑一种使用信号或类似方法的方法,而我只需要做一次。

我也在我的函数调用中使用@login_required,但这似乎并没有在用户收到此错误之前重定向用户。

每个注册用户都应该有一个 UserProfile 帐户,因为如果他们在登录系统时没有一个,则会自动创建一个。

我也在使用 Django 1.1

4

3 回答 3

2

这应该工作

def profile_required():
    def has_profile(user):
        try:
            user.get_profile()
        except:
            return False
        else:
            return True
    return user_passes_test(lambda u: has_profile(u))
于 2011-01-12T18:43:05.483 回答
0

装饰器@login_required确保用户已登录。此错误可能是由于某些用户记录没有 UserProfile 而发生的。您可以在 shell 中测试它

from django.contrib.auth.models import *
for u in User.objects.all():
    try:
        u.get_profile()
    except:
        print "%s does not have a profile" % u
于 2010-09-02T14:22:25.413 回答
0

因此正在考虑一种使用信号或类似方法的方法,而我只需要做一次。

AFAIK 你不能用信号做到这一点。

但是,您可以创建自定义装饰器来替换login_required. 这个装饰器可以包装login_required和检查用户配置文件。然后,您可以在 import 语句中将 Django 替换login_required为您自己的。

于 2010-09-02T08:40:44.820 回答