Для тех, кто все-таки опасается иметь в БД регистронезависмо одинаковых пользователей. Есть так же простое решение:
Изменения в backends.py
...
from django.http import Http404
...
class CaseInsensitiveModelBackend(ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
usermodel = get_user_model()
try:
user = usermodel.objects.get(username__iexact=username)
if user.check_password(password):
return user
else:
return None
except usermodel.DoesNotExist:
return None
except usermodel.MultipleObjectsReturned:
# пользователь с "нежелательным" username уже записан в БД, найдем его
user = usermodel.objects.get(username=username)
# и удалим
user.delete()
# эстеты тут могут придумать что-то и поизящнее
raise Http404('Недопустимое имя пользователя %s' % username)
То есть, так как после регистрации происходит вход юзера на сайт, этот момент можно отловить в бэкенде, и удалить этого юзера.
На что обратить внимание:
1. Я не даю в профиле править имя пользователя (чтобы сохранить историю, ссылки, и проч...). Но если кто-то это позволяет, то тогда, думайте сами :)
2. Это все точно будет работать если в БД регаются через форму Django. Если вы заливаете юзеров откуда-то еще, например, из уже существующей сторонней БД, то проверку на регистронезависимую идентичность надо будет делать при этой операции вам самим.
PS Согласен, уровень ереси в этой теме просто зашкаливает! ;)