@reqww

Как оформить регистрацию?

Есть модель юзера:
class Client(AbstractBaseUser, PermissionsMixin):
    '''Кастомная модель пользователя'''
    email = models.EmailField('Почта', max_length = 60, unique = True)
    first_name = models.CharField('Имя', max_length=30, default = '')
    last_name = models.CharField('Фамлиия', max_length=30, default = '')
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)


Есть модель компании
class Company(models.Model):
    '''Компания'''
    name = models.CharField('Название', max_length=50)
    url = models.URLField('Ссылка', max_length=100)
    admin = models.ForeignKey(Client, verbose_name='Администратор', on_delete=models.CASCADE)
    workers = models.ManyToManyField(Client, verbose_name='Работники', related_name='work')


Есть двухступенчатая регистрация.
На первом этапе пользователь вводит свои данные и регистрируется, на втором вводит информацию для создания компании.
Не могу понять, как правильно было бы реализовать ее создание.

Придумал несколько решений
1) Можно при создании модели передавать айди пользователя, но тогда получится, что незалогиненные пользователи могут создавать эти компании, а этого хотелось бы избежать и использовать
def perform_create(self, serializer):
        serializer.save(admin=self.request.user)

Это проще и быстрее, как мне кажется

2) При регистрации сделать третью вкладку, но поместить ее второй. После регистрации приходит на почту письмо с ссылкой активации. Можно спрашивать у пользователя, подтвердил ли он свой аккаунт, после чего пользователь нажмет на кнопку "Подтвердил", и фронт отправит запрос на получение access-токена по этому пользователю, а потом спокойно вставит его в заголовки запроса создания компании, таким образом юзер будет

3) Можно отправлять данные пользователя и данные компании одним запросом, чтобы они приходили вместе, после чего я бы спокойно создавал и то и другое (самый бредовый вариант на мой взгляд)

Подскажите, какой из них более верный или просто предложите совершенно иной, который на ваш взгляд правильный
Спасибо
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 2
IDzone-x
@IDzone-x
Костыли сила паттерны могила
Нелзя ли просто редиректить после регистрации на страницу создания компании. Когда прошла регистрация сразу логинить а там брать даные из request и создавать обект. И заполнять поле админ текущим юзером.
view обернуть декоратором login_required, и зделать проверку есть и у пользователя уже компания если да редиректить на какую-то страницу если нет рендерить текущую
Ответ написан
Комментировать
kirbi1996
@kirbi1996
Все это можно сделать на 1 странице, делаешь стэйт который показывает какую форму отображать например ("first") . По умолчанию это первая форма, заполнив первую форму пользователь отправляет данные на бэк, бэк проверяет и если все гуд присылает тебе в ответе параметр который будет тру. Ты делаешь проверку если param && setState("second") , ну и в самой верстке отразится то что тебе нужно
{state === "first" ? (Верстка 1 формы) : (верстка второй формы ) }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы