我在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>
我不知道如何开始...
感谢。
答案 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为您管理