Недавно я искал варианты регистрации пользователей, используя шаги активации, и наткнулся на проект django-registration.
В принципе, проблема, которую я заметил, просматривая код, заключается в следующем, и я незнать, какой самый «дешевый» способ решить эту проблему:
Существует двусмысленность между «удаленными» пользователями (помеченными как неактивные - предлагается в нескольких источниках), неактивными пользователями, которые просто не активировали свою учетную запись.(но активация еще не истекла) и те, у которых истек срок действия активации.
Все эти пользователи в auth_user db имеют is_active = False
Чтобы различать «действительных» и «недействительных» пользователей любого пользователяЗапросы БД также должны идти в профиль пользователя и проверять наличие нескольких вещей: то есть следующие действительные пользователи:
- user.is_active = False AND user.get_profile (). activated! = ACTIVATED AND not_expired_yet
- user.is_active = True
Это в основном влияет на все операции запроса на объекте userss, если кто-то хочет рассматривать только допустимых пользователей.
Причина, по которой мне понравилось расширение профиля по сравнению с наследованием из модели User (которая создает запросы SQL JOIN), заключалась в том, чтобы избегать дополнительных запросов JOIN везде, где мне не требуется доступполя профиля пользователя.
Итак, я думаю, чтобы сделать короткую историю короткой - два вопроса:
Что бы вы посоветовали для django-регистрационного подхода для решения этой двусмысленности?QuerySet.select_related - это самое лучшее, что я мог придумать, в основном это будет JOIN для каждого запроса на userdb.
Как красиво обернуть прямые вызовы django.auth.contrib.UserМетоды .objects, такие как filter, get, exclude, чтобы они учитывали только действительных пользователей?Лучшее, о чем я мог подумать, - обойти метод RegistrationProfile даже для пользовательских запросов ...
Любые отзывы приветствуются