基于类视图的Django身份验证和登录问题

时间:2017-08-16 13:09:38

标签: django django-forms django-authentication

我正在尝试实现两种不同的观点:一种用于注册目的,另一种用于登录目的。 现在,注册过程完美无缺,但身份验证过程却没有。

以下是代码:

在forms.py中,第一个名为UserForm的表单用于注册用户,第二个名为LoginForm的表单用于登录用户。

from django.contrib.auth.models import User
from django import forms

class UserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'username', 'email', 'password']

class LoginForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ['username', 'email', 'password']
在views.py中

from django.shortcuts import render, get_object_or_404, redirect
from .models import Step, Cycle, Program, MotorSetting, GeneralSetting
from django.views import generic
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse_lazy
from django.contrib.auth import authenticate, login
from django.views.generic import View
from .forms import UserForm
from .forms import LoginForm


class UserFormView(View):
form_class = UserForm
template_name = 'programs/registration_form.html'

# display blank form
def get(self, request):
    form = self.form_class(None)
    return render(request, self.template_name, {'form': form})

#process form data
def post(self, request):
    form = self.form_class(request.POST)

    if form.is_valid():

        #storing the data but NOT SAVING them to db yet
        user = form.save(commit=False)

        #cleaning and normalizing data
        username = form.cleaned_data['username']
        password = form.cleaned_data['password']
        user.set_password(password)
        #saving to db
        user.save()

        #if credentials are correct, this returns a user object
        user = authenticate(username=username, password=password)

        if user is not None:

            if user.is_active:

                login(request, user)
                return redirect('programs:index')

    return render(request, self.template_name, {'form': form})


class LoginFormView(View):
    form_class = LoginForm
    template_name = 'programs/login_form.html'

    # display blank form
    def get(self, request):
        form = self.form_class(None)
        return render(request, self.template_name, {'form': form})

    #process form data
    def post(self, request):
        form = self.form_class(request.POST)

        if form.is_valid():

            #storing the data but NOT SAVING them to db yet
            user = form.save(commit=False)

            #if credentials are correct, this returns a user object
            user = authenticate(username=username, password=password)

            if user is not None:

                if user.is_active:

                    login(request, user)
                    return redirect('programs:index')

        return render(request, self.template_name, {'form': form})
在app / urls.py

from django.conf.urls import include, url
from . import views

app_name = 'programs'

urlpatterns = [

    #register page
    url(r'^register/$', views.UserFormView.as_view(), name='register'),

    #login page
    url(r'^login/$', views.LoginFormView.as_view(), name='login'),

]

注册过程顺利进行,认证/登录没有。当我填写表格进行登录并按发送时,除了表格再次变为空白之外没有任何反应。

我在代码中没有看到任何错误吗?

非常感谢!

0 个答案:

没有答案