1

UserProfileモデルを作成した後。ログインの作成を開始しましたが、get_user()エラーのためにスタックします。

例外

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

これが私のコードです:

アップデート

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()

これを修正する方法は?どんな助けでもいただければ幸いです。私はDjango1.5を初めて使用します。助けが必要。

4

1 に答える 1

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', ''),
    )            
于 2013-03-09T15:53:56.517 に答える