2013-03-09 5 views
1

После создания модели UserProfile. Я начал создавать логин, но я застрял из-за ошибки get_user().Django 1.5 - Login

ИСКЛЮЧЕНИЕ

AttributeError: 'LoginForm' object has no attribute 'get_user' 

Вот мои коды:

UPDATE

class LoginView(FormView): 
    form_class = LoginForm 
    redirect_field_name = REDIRECT_FIELD_NAME 
    template_name = 'login.html' 
    success_url = '/' 

    def form_valid(self, form): 
     username = form.cleaned_data['username'] 
     password = form.cleaned_data['password'] 

     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       login(self.request, user) 
       return HttpResponseRedirect(self.get_success_url()) 
     else:   
      return self.form_invalid() 

    def form_invalid(self): 
     return HttpResponseRedirect(reverse('accounts:login')) 

    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 = settings.LOGIN_REDIRECT_URL 
     elif netloc and netloc != self.request.get_host(): 
      redirect_to = settings.LOGIN_REDIRECT_URL 
     return redirect_to 

    def post(self, request, *args, **kwargs): 
     form_class = self.get_form_class() 
     form = self.get_form(form_class) 
     if form.is_valid(): 
      return self.form_valid(form) 
     else:     
      return self.form_invalid() 

Как это исправить? Любая помощь будет оценена по достоинству. Я действительно новичок в Django 1.5. Нужна помощь.

+0

Я нашел это в документации: Если вы настроили проверку подлинности (см Customizing Authentication) вы можете передать форму пользовательской аутентификации в целях авторизации через параметр authentication_form. Эта форма должна принимать аргумент ключевого слова запроса в методе __init__ и предоставлять метод get_user, который возвращает объект аутентифицированного пользователя (этот метод вызывается только после успешной проверки формы). –

+0

Можете ли вы разместить код LoginForm? –

+0

@ AdriánLópez завершает – catherine

ответ

1

[обновление]

В исходном коде, автор делает authenticate материал внутри метода формы под названием get_user. Вы делаете это за пределами формы, поэтому просто замените form.get_user() на user.

Я использую вид входа в систему, которая не основана класс, и я даже не забочусь в использовании формы экземпляра Django, но это должно быть легко адаптироваться:

def signin(request): 
    if request.method == 'POST': 
     user = authenticate(
      email=request.POST.get('username', '').lower().strip(), 
      password= request.POST.get('password', ''), 
     ) 
     if user is None: 
      messages.error(request, u'Invalid credentials') 
     else: 
      if user.is_active: 
       login(request, user) 
       return HttpResponseRedirect(request.GET.get('next', '/')) 
      else: 
       messages.error(request, u'User is not active.') 

    return render_to_response('login.html', locals(),  
         context_instance=RequestContext(request)) 

[старый ответ]

Определите метод get_user для вашей формы.

Непроверенные (но должно получить вас в правильном пути):

def get_user(self): 
    from django.contrib.auth import authenticate 
    return authenticate(
      email=self.cleaned_data.get('username', '').lower().strip(), 
      password=self.cleaned_data.get('password', ''), 
    )    
+0

еще одна ошибка: объект «Пользователь» не имеет атрибута «backend» – catherine

+0

@catherine: вы можете попробовать обновленный код? (Я использую поле электронной почты в качестве имени пользователя, пожалуйста, приспосабливайтесь к вашим потребностям) –

+0

finish, ........ – catherine