尝试使用电子邮件登录用户时,使用基于类的视图登录无法按预期工作

时间:2015-09-08 07:51:17

标签: django-views django-class-based-views

my views.py:

from django.http import HttpResponse
from django.shortcuts import render, render_to_response
from django.contrib.auth import login, authenticate
from django.contrib.auth.models import User
from django.shortcuts import render
from django.views.generic import View
from .forms import LoginForm, RegistrationForm


class Login(View):
    form_class = LoginForm
    initial = {'key': 'value'}
    template_name = 'web/login.html'

    def get(self, request):
        form = self.form_class(initial=self.initial)
        return render(request, self.template_name, {'form': form})

    def post(self, request):
        if request.method == 'POST':
            form = self.form_class(initial=self.initial)
            if form.is_valid():
                email=form.cleaned_data['email']
                password=form.cleaned_data['password']
                auser = User.objects.get(email=email)
                username = auser.username
                buser = authenticate(username, password)
                if buser:
                    if buser.is_active:
                        login(request, buser)
                        return HttpResponse('Good to Go...')
                    else:
                        return HttpResponse('your account is disabled...')
                else:
                    print "Invalid login details: {0}, {1}".format(email, password)
                    HttpResponse('invalid login details...')
            else:
                return HttpResponse('Form is not valid!')
        else:
            form = self.form_class()

上面我试图在基于类的视图中使用电子邮件作为唯一字段登录用户。但它提出“表格无效!”正如我在观点中指出的那样。我完全不知道它究竟出了什么问题。请帮我解决一下怎么办? 在此先感谢

1 个答案:

答案 0 :(得分:0)

您需要更改此类的post方法:

def post(self, request):
    if request.method == 'POST':
        form = self.form_class(data=self.request.POST)
        if form.is_valid():
        .....