Я пишу функцию, которая нормализует адрес электронной почты 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).