python - AbstractBaseUser 电子邮件作为用户名验证

标签 python django validation authentication django-templates

我在 Django 1.6 中有以下代码,它可以很好地使用电子邮件作为用户名。但我想检查电子邮件是否在电子邮件字段中设置,如果未设置,则会引发验证错误。 另外,我想检查一下电子邮件表达是否正确。我已阅读文档,但我很困惑,不知道如何处理它。

密码验证效果很好。

这是我的模型表单:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from django.contrib import admin
from django import forms 
from django.contrib.auth.forms import ReadOnlyPasswordHashField
from django.contrib.auth.models import Group
from django.contrib.auth.admin import UserAdmin

from .models import Usuario

class UserCreationForm(forms.ModelForm):
    first_name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Introduce tu nombre', 'required': 'true'}))
    last_name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Introduce tus apellidos'}))
    password1 = forms.CharField(label='Contraseña', widget=forms.PasswordInput(attrs={'placeholder': 'Introduce una contraseña'}))
    password2 = forms.CharField(label='Repetir contraseña', widget=forms.PasswordInput)
    email = forms.EmailField(widget=forms.TextInput(attrs={'placeholder': 'Introduce tu correo electrónico'}))

class Meta:
   model = Usuario
   fields = ('email', 'first_name', 'last_name')

def clean_password2(self):
    # Comprueba que los dos password son iguales
    password1 = self.cleaned_data.get('password1')
    password2 = self.cleaned_data.get('password2')

    if password1 and password2 and password1 != password2:
        raise forms.ValidationError('Las contraseñas no coinciden')

    return password2


def save (self, commit=True):
    user = super(UserCreationForm, self).save(commit=False)
    user.set_password(self.cleaned_data['password1'])
    if commit: 
        user.save()
    return user

我的模板中的注册表单:

<form class="auth_form" action="" method="post">{% csrf_token %}
            <div class="name_box">
                <label for="first_name">Nombre</label>
                {{ form.first_name }}
                {{ form.first_name.errors }}
            </div>
            <div class="name_box">
                <label for="id_last_name">Apellidos</label>
                {{ form.last_name }}
                {{ form.last_name.errors }}
            </div>
            <label for="id_email">Correo electrónico</label>
            {{ form.email }}
            {{ form.email.errors }}
            <label for="id_password1">Contraseña</label>
            {{ form.password1 }}
            <label for="id_password2">Repetir contraseña</label>
            {{ form.password2 }}
            {{ form.password2.errors }}
            <input type="submit" value="Registrarme">
        </form>

我不知道如何开始...

谢谢。

最佳答案

需要电子邮件:

如果您的电子邮件表单字段中没有required=False,则需要在表单中填写电子邮件,否则表单将引发错误。因此,现在您需要填写电子邮件以提交表单。

无论如何,如果您想确保这一点,您可以添加一个 def clean_email 并根据需要管理电子邮件的保存。

(loscamposdelformariopordefetosonrequeridos, salvoqueañadasun“required=False”aldefinirelcampo.Siquisierasalgomasdepersonalizaciónalahoradeañadirelemailpodríascrearundef clean_email y añadir lo que quieras)

电子邮件格式:

当您创建 EmailField 字段时,它必须采用 XXX@XXX.XX 格式,以便 Django 将为您管理

关于python - AbstractBaseUser 电子邮件作为用户名验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24321882/

相关文章:

当 TextBox 中没有数字时 C# 程序崩溃

codeigniter - 如何让 form_validation 在 Codeigniter 中正常工作

使用 json.loads 时出现 Python 段错误——将 JSON 加载到列表中的替代方法?

python - 对象覆盖元组扩展的特殊方法?

Django 管理模板覆盖不起作用

python - 如何在 Django 中使用通用外键引用来引用对象

JavaScript:客户端与服务器端验证

python - celery 比多处理慢?

python firebase实时监听器

python - HTTPS设置后无法访问django网站