Django - 如果UserProfile匹配查询不存在,则重定向到登录页面错误

时间:2010-09-02 08:21:42

标签: django django-users

我使用UserProfile方法扩展了用户模型。但是,在运行查询UserProfile matching query does not exist

时,我偶尔会收到Django错误消息request.user.get_profile()

我认为当我退出系统时会发生这种情况,因此我的用户变为AnonymousUser。如果UserProfile不存在,我是否可以自动将用户重定向回登录页面。

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

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

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

我也在使用Django 1.1

3 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

  

所以想到一种使用信号的方式或类似的东西,我只需要做一次。

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

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

答案 2 :(得分: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