У меня есть простое приложение с двумя моделями - Client и Teacher, которые соединены OneToOne с пользователем Django по умолчанию.Устранение типа пользователя при аутентификации в 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', {})
Это на самом деле работает (вроде, редирект не делает, но делает Войти), если он является учителем. Я пробовал отладку, и если пользователь является клиентом, по какой-то причине поток не падает в другое, если только с ошибками. В отладчике я вижу, что клиентский объект существует, но я получаю сообщение об ошибке. RelatedObjectDoesNotExist. У пользователя нет учителя. Что я делаю не так?
Django 1.7, Python 2.7
Да, это работает! Любая идея о том, почему мой render() не работает? Я пытаюсь перенаправить на отдельный шаблон, основанный на регистрации типа пользователя. – cheenbabes
Что вы подразумеваете под «render() не работает»? Вы получили ошибку? – catavaran
Вместо перенаправления на шаблоны, которые я установил, например, teacher_account.html, его перенаправление на меня просто/ – cheenbabes