django.views.generic
. Если чего-то не хватает, берите самые используемые и поддерживаемые пакеты из перечисленных на djangopackages.com. Например, вместо изобретения велосипедов с логином и регистрацией, используйте django-allauth.AbstractUser
уже определяет большинство полей необходимых пользователю. Насколько я понимаю, AbstractBaseUser
нужен для реализации совсем кастомного пользователя, который радикально отличается от стандартного пользователя Django.
Например, валидация пользователя может пройти в первый раз, но между сохранением в сессию, оплатой, и созданием реального пользователя, может зарегистрироваться другой пользователь с тем же именем и email. И что тут делать? Никакого разумного решения, кроме адских костылей не придумать.
Кроме того, это просто сложное и запутанное решение, а сложные и запутанные решения часто ломаются и их тяжело поддерживать. Следующему разработчику после вас будет тяжело в этом разобраться.
Я бы на первом этапе создавал пользователя в базе сразу, с флагом `is_active = False` (этот флаг - часть стандартного класса пользователя Django). Если оплата прошла успешно, то ставил бы `is_active = True`. Заодно потом и статистику легко посчитать по `is_active`.