当我使用user = authenticate(username=username, email=email, password=password)
时,将创建用户但没有电子邮件。
我有一个旧项目,该代码可以完美运行,但现在在任何项目中均不起作用。
观看次数:
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login as django_login
from django.contrib.auth.forms import UserCreationForm
from .models import Profile
def signup(request):
if request.method == 'POST':
form = UserCreationForm(request.POST or None)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
password = form.cleaned_data.get('password1')
user = authenticate(username=username, email=email, password=password)
django_login(request, user)
return redirect('profile/')
form = UserCreationForm()
context = {'form': form}
return render(request, 'accounts/signup.html', context)
模板:
{% block content %}
<main>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<p>Username:</p>
<input type="text" name="username">
<p>Email:</p>
<input type="text" name="email">
<p>Password:</p>
<input type="password" name="password1">
<p>Repeat password:</p>
<input type="password" name="password2">
<p><input type="submit" value="submit"></p>
</form>
</main>
{% endblock %}
答案 0 :(得分:0)
from django.contrib.auth.models import User
user = User.objects.create_user(username=username, email=email, password=password)
电子邮件未包含在UserCreatedForm中。 link
答案 1 :(得分:0)
因此,就像薄荷所说的UserCreationForm
不包含电子邮件。为什么这么重要?不会抛出任何错误。
UserCreationForm.save()
未保存email
字段,因为它不知道该字段。您需要做的是子类UserCreationForm
来包含email字段,然后将该字段也包含在覆盖的save()
调用中。这是您可能要采取的方法:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class UserCreationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
user.email = self.cleaned_data["email"]
if commit:
user.save()
return user
对此问题归功于我将OP的表单子类从How do I extend UserCreationForm to include email field
中提取出来。