Django类视图CreateView创建用户后无法自动登录问题排查
问题:Django CreateView注册后无法自动登录,函数式视图正常
我正尝试将原有的函数式用户注册视图改写为等价的类视图(CreateView)。使用类视图注册新用户时,用户账号可成功创建,但注册完成后无法自动登录;而原函数式视图可正常实现注册后自动登录,且表单未返回任何错误。相关代码如下:
views.py(类视图,注册后不登录)
from django.contrib import messages from django.contrib.auth import login from django.urls import reverse_lazy from django.views.generic import CreateView from .forms import NewUserForm class RegisterUserView(CreateView): form_class = NewUserForm success_url = reverse_lazy('home') template_name = 'users/register.html' def form_valid(self, form): user = form.save() login(self.request, user) return super().form_valid(form) def form_invalid(self, form): messages.error(self.request, form.errors) return super().form_invalid(form)
views.py(函数式视图,注册后可登录)
from django.contrib import messages from django.contrib.auth import login from django.shortcuts import redirect, render from .forms import NewUserForm def register_user(request): if request.method == "POST": form = NewUserForm(request.POST) if form.is_valid(): user = form.save() login(request, user) return redirect('home') messages.error(request, form.errors) form = NewUserForm(request.POST) context = { "form": form } return render(request, "users/register.html", context)
models.py
from django.db import models from django.contrib.auth.models import AbstractUser class CustomUser(AbstractUser): email = models.EmailField(unique=True)
forms.py
from django import forms from django.contrib.auth.forms import UserCreationForm from .models import CustomUser class NewUserForm(UserCreationForm): email = forms.EmailField(required=True) class Meta: model = CustomUser fields = ["username", "email", "password1", "password2"] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.label_suffix = "" # 移除标签后的冒号 self.fields['username'].help_text = '仅允许字母、数字和@/./+/-/_。' self.fields['password1'].help_text = '8-20个字符,包含字母和数字,无空格。' self.fields['password2'].help_text = None def save(self, commit=True): user = super(NewUserForm, self).save(commit=False) user.email = self.cleaned_data['email'] if commit: user.save() return user
settings.py
AUTH_USER_MODEL = "users.CustomUser"
内容的提问来源于stack exchange,提问作者thenamethatiown
相关产品推荐
相关产品推荐

