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

时间:2014-06-20 07:15:25

标签: python django validation authentication django-templates

我在Django 1.6中有以下代码,它可以作为用户名使用电子邮件。但我想检查电子邮件字段中是否设置了电子邮件,如果未设置则提出并验证错误。 此外,我想检查电子邮件表达是否正确。我已阅读文档,但我很困惑,而且我找不到如何处理它。

密码验证效果很好。

这是我的ModelForm:

#!/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>

我不知道如何开始...

感谢。

1 个答案:

答案 0 :(得分:1)

需要电子邮件:

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

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

(los campos del formulario por defecto son requeridos,salvoqueañadasun“required = False”al definir el campo.Si quisieras algo masdepersonalizaciónala horadeañadirelemailpodríascrearun {{1} }yañadirloque quieras)

电子邮件格式:

当您创建def clean_email字段时,必须使用EmailField格式,以便Django为您管理