【问题标题】:authenticate creates the user but without email验证创建用户但没有电子邮件
【发布时间】:2018-07-24 17:15:36
【问题描述】:

当我使用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 %}

【问题讨论】:

    标签: python django


    【解决方案1】:
    from django.contrib.auth.models import User
    
    user = User.objects.create_user(username=username, email=email, password=password)
    

    电子邮件不包含在 UserCreatedForm 中。 link

    【讨论】:

    • 解释您的代码以及它如何解决问题将提高您的回答质量,并帮助学习用户。
    • 问题是邮件返回无
    【解决方案2】:

    所以,就像 Mint 所说的那样,UserCreationForm 不包括电子邮件。为什么这很重要?不会抛出任何错误或任何东西。

    UserCreationForm.save() 没有保存email 字段,因为它不知道。您需要做的是子类UserCreationForm 以包含电子邮件字段,然后将该字段也包含在覆盖的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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      相关资源
      最近更新 更多