### full_email/__init__.py ##################################################### """Full e-mail address validation for Django""" ### full_email/formfields.py ################################################### from django import forms from .validators import validate_full_email class FullEmailField(forms.EmailField): default_validators = [validate_full_email] ### full_email/validators.py ################################################### from django.core.validators import email_re, EmailValidator, ValidationError from django.utils.translation import ugettext_lazy as _ class FullEmailValidator(EmailValidator): def __call__(self, value): try: super(FullEmailValidator, self).__call__(value) except ValidationError, e: # Trivial case failed. Try for possible Full Name if value and u'<' in value and value.endswith(u'>'): parts = value.rsplit(u'<', 1) fullname_part = parts[0].rstrip() email_part = parts[1][:-1] super(EmailValidator, self).__call__(email_part) else: raise validate_full_email = FullEmailValidator(email_re, _(u'Enter a valid e-mail address.'), 'invalid') ### full_email/models.py ####################################################### from django.db import models from . import formfields from .validators import validate_full_email class FullEmailField(models.EmailField): default_validators = [validate_full_email] def formfield(self, **kwargs): defaults = {'form_class': formfields.FullEmailField} defaults.update(kwargs) return super(FullEmailField, self).formfield(**defaults)