我使用UserProfile
方法扩展了用户模型。但是,在运行查询UserProfile matching query does not exist
request.user.get_profile()
我认为当我退出系统时会发生这种情况,因此我的用户变为AnonymousUser
。如果UserProfile
不存在,我是否可以自动将用户重定向回登录页面。
我在很多地方都使用request.user.get_profile()
所以不要真的想通过我的代码对每个人进行检查,所以想到一种使用信号的方法或类似的东西,我只需要做一次
此外,我在函数调用中使用@login_required
,但这似乎并没有在用户收到此错误之前重定向用户。
每个注册用户都应拥有一个UserProfile帐户,因为如果他们在登录系统时没有帐户,则会自动创建。
我也在使用Django 1.1
答案 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