Я довольно новый ατ Django. Я пытаюсь разработать аутентификацию пользователя для своего приложения. Для чего я использую AuthenticationForm
для формы и FormView для входа в систему. Я также создал пользовательский Backend, который аутентифицирует пользователей, используя адрес электронной почты вместо имени пользователя. Аутентификация, кажется, работает нормально, потому что она возвращает объект пользователя, когда поставляется с правильной электронной почтой и паролем, и в противном случае показывает ошибку. И form_valid()
доставит меня до 'success_url
'. Но когда я пытаюсь получить доступ к пользовательским атрибутам, таким как имя или адрес электронной почты, я не могу получить к ним доступ в шаблоне (success_url). И user.is_authenticated
, кажется, возвращает False. Что может быть неправильным? Я потратил часы, пытаясь исправить это, но пока не успел. Я был бы очень признателен вам за ваше убеждение и внушение. Заранее спасибо.Пользователь не вошел. Шаблон не имеет доступа к пользовательским атрибутам
Вот мой LoginView:
класс LoginView (FormView):
form_class = AuthenticationForm
success_url = "hello/"
#redirect_field_name = REDIRECT_FIELD_NAME
template_name = 'draint_user/login.html'
@method_decorator(csrf_protect)
@method_decorator(never_cache)
def dispatch(self, *args, **kwargs):
return super(LoginView, self).dispatch(*args, **kwargs)
def form_valid(self, form):
"""
The user has provided valid credentials (this was checked in AuthenticationForm.is_valid()). So now we
can check the test cookie stuff and log him in.
"""
self.check_and_delete_test_cookie()
user = form.get_user()
login(self.request, user)
print form.get_user().name
return super(LoginView, self).form_valid(form)
def form_invalid(self, form):
"""
The user has provided invalid credentials (this was checked in AuthenticationForm.is_valid()). So now we
set the test cookie again and re-render the form with errors.
"""
self.set_test_cookie()
return super(LoginView, self).form_invalid(form)
def get_success_url(self):
if self.success_url:
redirect_to = self.success_url
else:
redirect_to = self.request.REQUEST.get(self.redirect_field_name, '')
netloc = urlparse.urlparse(redirect_to)[1]
if not redirect_to:
redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL)
# Security check -- don't allow redirection to a different host.
elif netloc and netloc != self.request.get_host():
redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL)
return redirect_to
def set_test_cookie(self):
self.request.session.set_test_cookie()
def check_and_delete_test_cookie(self):
if self.request.session.test_cookie_worked():
self.request.session.delete_test_cookie()
return True
return False
def get(self, request, *args, **kwargs):
"""
Same as django.views.generic.edit.ProcessFormView.get(), but adds test cookie stuff
"""
self.set_test_cookie()
return super(LoginView, self).get(request, *args, **kwargs)
Вот вид на success_url:
def hello(request):
return render(request,"draint_user/hello.html",{})
И вот мой hello.html (шаблон)
<body>
{% if user.is_authenticated %}
<p>Welcome, {{ user.get_username }}. Thanks for logging in.</p>
{% else %}
<p>Welcome, new user. Please log in.</p>
{% endif %}
</body>
Я действительно не получить свою точку зрения. Я имею в виду, как мне это сделать, что-то делать в settings.py? – sajid
См. Обновленный ответ – GwynBleidD
Это просто неправда. Контекстный процессор 'auth', который по умолчанию и указан первым в приведенном ниже фрагменте настроек, добавляет' auth' в контекст. Запрос просто добавляет 'запрос'. –