在 Django 中解决身份验证中的用户类型
Resolve user type in authentication in Django
我有一个简单的应用程序,它有两个模型,客户端和教师,它们通过 OneToOne 与默认的 Django 用户连接。
应用程序中只有一个登录页面。根据用户类型,我想将它们重定向到 /myaccount 但显示不同的模板。
这是我的代码:
def user_login(request):
context_dict ={}
if request.method =='POST':
username = request.POST['username']
password = request.POST['password']
user= authenticate(username=username, password=password)
#teacher flow
if user.teacher:
if user.is_active:
login(request, user)
template = 'teacher_account.html'
context_dict['teacher'] = user
return render(request, template, context_dict)
else:
return HttpResponse("Your account is disabled")
#client flow
elif user.client:
if user.is_active:
login(request, user)
template = "client_account.html"
context_dict['client'] = user
return render(request, template, context_dict)
else:
return HttpResponse("Your account is disabled")
else:
print "Invalid login details: {0}, {1}".format(username, password)
return HttpResponse("Invalid login details supplied")
#GET Request
else:
return render(request, 'login.html', {})
如果是老师,它确实有效(某种程度上,重定向无效,但登录有效)。我试过调试,如果用户是客户端,由于某种原因,流程不会进入 else if,只是出错。在调试器中,我可以看到客户端对象存在,但出现错误 RelatedObjectDoesNotExist - User has no teacher。我做错了什么?
Django 1.7,Python2.7
user.client
存在,但 user.teacher
不存在,因此您收到错误,然后在 if user.teacher:
语句中访问此属性。
将其替换为如下内容:
if Teacher.objects.filter(user=user).exists():
...
我有一个简单的应用程序,它有两个模型,客户端和教师,它们通过 OneToOne 与默认的 Django 用户连接。
应用程序中只有一个登录页面。根据用户类型,我想将它们重定向到 /myaccount 但显示不同的模板。
这是我的代码:
def user_login(request):
context_dict ={}
if request.method =='POST':
username = request.POST['username']
password = request.POST['password']
user= authenticate(username=username, password=password)
#teacher flow
if user.teacher:
if user.is_active:
login(request, user)
template = 'teacher_account.html'
context_dict['teacher'] = user
return render(request, template, context_dict)
else:
return HttpResponse("Your account is disabled")
#client flow
elif user.client:
if user.is_active:
login(request, user)
template = "client_account.html"
context_dict['client'] = user
return render(request, template, context_dict)
else:
return HttpResponse("Your account is disabled")
else:
print "Invalid login details: {0}, {1}".format(username, password)
return HttpResponse("Invalid login details supplied")
#GET Request
else:
return render(request, 'login.html', {})
如果是老师,它确实有效(某种程度上,重定向无效,但登录有效)。我试过调试,如果用户是客户端,由于某种原因,流程不会进入 else if,只是出错。在调试器中,我可以看到客户端对象存在,但出现错误 RelatedObjectDoesNotExist - User has no teacher。我做错了什么?
Django 1.7,Python2.7
user.client
存在,但 user.teacher
不存在,因此您收到错误,然后在 if user.teacher:
语句中访问此属性。
将其替换为如下内容:
if Teacher.objects.filter(user=user).exists():
...