Регистронезависимый логин в django
По моему мнению логины на сайте должны быть регистронезависимыми, так как регистрация на одном сайте пользователей с логином «Django» и «django» может привести к неприятным конфузам. Будем отучать джанго от этого.
Для того, чтобы логины в стали регистронезависимыми подключим в наше проект бэкенд аутентификации (AUTHENTICATION_BACKEND). Следующий класс поместим согласно идеологии Django в отдельный файл backends.py рядом с определениями моделей, представлений и т.п (models.py, views.py). Импортируем модули
1 2 |
from django.contrib.auth.backends import ModelBackend from django.contrib.auth.models import User |
И, собственно, код который осуществляет проверку логина в независимости от регистра.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class CaseInsensitiveModelBackend(ModelBackend): """ По умолчанию ModelBackend чувствителен к регистру _sensitive_ логина пользователя, что нам и не нравится. Этот бэкенд поддерживает регистронезависимую авторизацию. """ def authenticate(self, username=None, password=None): try: user = User.objects.get(username__iexact=username) if user.check_password(password): return user else: return None except User.DoesNotExist: return None |
Затем редактируем settings.py и добавляем наш код в обработчик авторизации.
1 |
AUTHENTICATION_BACKENDS = ('myproject.myapp.backends.CaseInsensitiveModelBackend',) |
Вот, собственно и всё что нам нужно. Теперь наши логины регистронезависимы!
P.S. код взят с http://blog.shopfiber.com/?p=220