Задать вопрос
@trytrytry

Проблемы при написании формы для логирования?

Пишу сайтик учебный. Написал страницу логирования, все коректно отображается, но как только нажимаю ок, переходит не на ту ссылку, вообще переходит на непонятную мне ссылку.
Вот мой views.py:

def index(request):

    if request.user.is_authenticated():
        
        return render(request, 'account/index.html',
                      {
                       'user' : request.user,
                       
                       }
                      )
    else:
        return HttpResponseRedirect(reverse('account.views.login'))
   

def logout(request):
    if request.user.is_authenticated():
        auth.logout(request)
    return HttpResponseRedirect(reverse('account.views.login'))


def login(request):
    if request.method == 'POST':
        f = LoginForm(request.POST)
        if f.is_valid():
            username = f.cleaned_data['username']
            password = f.cleaned_data['password']
            user = auth.authenticate(username=username, password=password)
            if user is not None and user.is_active:
                auth.login(request, user)
                return HttpResponseRedirect(reverse('account.views.index'))
    else:
        f = LoginForm()

    return render(request, 'account/login.html', {'f': f})


и вот urls.py
urlpatterns = patterns('',
    url(r'^$', 'account.views.index', name='index'),
    
    url(r'^login/$', 'account.views.login', name = 'login'),
    
)

и еще один urls.py
urlpatterns = patterns('',
    
    url(r'^admin/', include(admin.site.urls)),
    url(r'^account/', include('account.urls')),
)


При успешном логирование происходит переход на index.html где отображается имя пользователя, но он переходит почему то на такую страницу:

http://127.0.0.1:8000/login/
  • Вопрос задан
  • 2853 просмотра
Подписаться 2 Оценить 2 комментария
Решения вопроса 2
maxaon
@maxaon
Ошибка тут:
return HttpResponseRedirect(reverse('account.views.login'))

Функция "reverse" ищет по имени, соответственно надо так:
return HttpResponseRedirect(reverse('login'))
Аналогично
reverse('account.views.index')
Ответ написан
Комментировать
SilentSokolov
@SilentSokolov
1) Для начала посмотрите на код в документации, там показана банальная обработка ошибок, тот факт, что вам повторно показывается форма, говорит о том, что они или не валидна (f.is_valid) или пользователь не проходит аутентификацию (auth.authenticate). Обработка ошибок поможет определить конкретнее (если напишите через print - информация выведиться в консоле, а не в шаблоне!).

2) Так же на будущее, функцию index можно обернуть в декоратор, чтобы не писать лишний код руками для проверки авторизован ли юзер
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@trytrytry Автор вопроса
сначала на странице .../account/login форма все правильно отображается, но потом чтоб просто перейти на .../account/ он переходит на .../login/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы