0

Я пытаюсь создать login страницу с помощью django auth.views
Но, к сожалению, пользователь не получает войти в систему. Я даже пытался войти в систему как суперпользователь (возможность входа в систему с помощью Джанго администратора). Но не смог войти в систему как суперпользователь даже через мой логин.
Вот мой views.pyДжанго Логин не работает

from django.shortcuts import render 
from django.http import HttpResponse,HttpResponseRedirect 
from django.core.urlresolvers import reverse 
from django.utils.decorators import method_decorator 
from django.contrib.auth.decorators import login_required 
from .forms import LoginForm 
from django.utils import timezone 
from django.views.generic.base import TemplateView, RedirectView 
from django.views.generic.edit import FormView 
from django.views.generic import DetailView, ListView 
from django.contrib.auth.forms import AuthenticationForm 
from django.contrib.auth import login as auth_login 
from django.shortcuts import redirect, resolve_url 
from django.utils.decorators import method_decorator 

from django.views.decorators.debug import sensitive_post_parameters 



class IndexView(TemplateView): 
    template_name = 'index.html' 
    def get_context_data(self, **kwargs): 
     context = super(IndexView, self).get_context_data(**kwargs) 
     context = {'now':timezone.localtime(timezone.now(),timezone = None) } 
    return context 

class Login(FormView): 
    form_class = AuthenticationForm 

    def form_valid(self, form): 
     redirect_to = settings.LOGIN_REDIRECT_URL 
     auth_login(self.request, form.get_user()) 
     if self.request.session.test_cookie_worked(): 
      self.request.session.delete_test_cookie() 
     return HttpResponseRedirect(redirect_to) 

    def form_invalid(self, form): 
      return self.render_to_response(self.get_context_data(form=form)) 

    @method_decorator(sensitive_post_parameters('password')) 
    def dispatch(self, request, *args, **kwargs): 
     request.session.set_test_cookie() 
     return super(Login, self).dispatch(request, *args, **kwargs) 



class ProfileView(TemplateView): 
    template_name='profile.html' 

    @method_decorator(login_required) 

    def dispatch(self, *args, **kwargs): 
     if self.request.user.is_active: 
      return super(ProfileView, self).dispatch(*args, **kwargs)     
     else:   
      return HttpResponseRedirect('%s?next=%s' % (settings.LOGIN_URL, self.srequest.path)) 

В settings.py У меня есть значения настройки для LOGIN_URL и LOGIN_REDIRECT_URL в 'accounts/login' и 'accounts/profile' соответственно.

Это моя форма в шаблоне.

<form method="post" action="{% url 'django.contrib.auth.views.login' %}"> 
     {% csrf_token %} 
     {{ form.as_p }} 
     <input class="btn btn-danger form-control submit-btn" type="submit" value="Login + Access Profile" /> 
</form> 

Проблема: После ввода учетных данных, URL-адрес просто добавляет csrfmiddletoken = ..... Она не перенаправлять на страницу профиля. Пользователь также не регистрируется (поскольку при посещении accounts/profile он перенаправляется на страницу входа.)

Может ли кто-нибудь помочь мне в этом. Я просто изучаю классы, основанные на классе Django, аутентификацию. Заранее спасибо.

+0

Я не знаю, почему вы разместили свои views.py, вы отправляете на встроенные представления Django, так что ваши собственные представления не используются. –

+0

Итак, нужно ли менять действие формы? @DanielRoseman –

+0

Даниэль Роземан прав, вы звоните в автоответчик Django. Измените actio nand и убедитесь, что ваш url.py вызывает ваше мнение. – jcs

ответ

1

Вы пытаетесь использовать пользовательскую CBV Login(FormView), но в шаблоне у вас есть <form method="post" action="{% url 'django.contrib.auth.views.login' %}"> Таким образом, ваш запрос на вход не может быть вызван в POST-запросе. Вы должны изменить «действие» аргумент, по крайней мере action="/accounts/login" (но лучше использовать «URL» тег шаблона)

Дополнительная информация: http://www.w3.org/TR/html401/interact/forms.htmlhttps://docs.djangoproject.com/en/1.8/ref/templates/builtins/ (раздел «URL»)

Кроме того, я заметил опечатку в return HttpResponseRedirect('%s?next=%s' % settings.LOGIN_URL, self.srequest.path)) - Я думаю, что должно быть self.request.path

+0

Спасибо @svfat, это сработало. Отличная помощь! –

Смежные вопросы