I previously said
> we should refactor it so (for example) validate_domain_name() calls is_domain_name() and raises a ValidationError if it returns False."

That would look something like the following:
```python
def is_domain_name(self, name):
    return name is valid
def validate_domain_name(self, name):
    if not is_domain_name(name):
        raise ValidationError("The domain {} is not valid.".format(name)) # vague
```

However, **now I'm thinking it should be the other way around:**
```python
def validate_domain_name(self, name):
    if not name is valid:
        raise ValidationError(what_exactly_is_wrong) # more specific
def is_domain_name(self, name):
    try:
        validate_domain_name(name)
        return True
    except ValidationError:
        return False
```
That way you can get a more specific error message when you call `validate_domain_name()`, but you can still get a True or False from `is_domain_name()`.