Где написать функцию / метод в проекте Django - PullRequest
0 голосов
/ 30 сентября 2018

Я пишу функцию, которая нормализует адрес электронной почты Gmail, преобразовывая их из:

david.New+1234@gmail.com ==> davidnew@gmail.com

В противном случае, например, кто-то может зарегистрироваться несколько раз из учетной записи Gmail.Моя текущая функция находится в models.py и выглядит следующим образом:

def normalize_email(email):
    """
    Make sure people cannot register variations of the same email address
    """
    email = email.lower()
    name, domain = email.split('@')
    name = name.replace('.', '').split('+')[0]
    email = name + '@' + domain
    return email

Эта функция вызывается только моделью User, поэтому мой вопрос: где эта функция / метод должна лучше всего "жить"?Например:

1) Внутри модели User как обычный метод:

class User(models.Model):
    [fields here...]


    def normalize_email(self, email):
        ...

2) Внутри модели User как метод класса


class User(models.Model):
    [fields here...]


    @classmethod
    def normalize_email(cls, email):
        ...

3) Внутри модели User как статический метод

class User(models.Model):
    [fields here...]


    @staticmethod
    def normalize_email(email):
        ...

4) Внутри User ModelManager:

class User(models.Model):
    [fields here...]
    objects = UserManager()

5) За пределами всего, кромев файле models.py как обычная функция.

def normalize_email(email):
    ...

class User(models.Model):
    [fields here...]

Что из перечисленного имеет смысл делать, а что нет?(например, почему бы нам не захотеть использовать вариант X выше, но может иметь смысл выбор Y или Z).

...