Принудительно Django пользователь выбирает имя пользователя после проверки его электронной почты и входа в систему в первый раз - PullRequest
0 голосов
/ 12 апреля 2020

Я ищу идеи о наиболее элегантном способе заставить пользователя определить имя пользователя сразу после того, как они проверит свою электронную почту и войдут в первый раз. Кроме того, они нажимают на подтверждение по электронной почте, не вошли в систему и должны сначала ввести имя пользователя, чтобы иметь возможность войти в систему в первый раз.

Мои требования состоят в том, чтобы имя пользователя отсутствовало в форме регистрации, но вместо этого будьте на собственной странице шаблона сразу после того, как пользователь войдет в систему в первый раз . Как только они определят имя пользователя, они не увидят эту страницу снова.

Я использую представления на основе классов, так что я думаю, что это исключает декораторы.

I ' ve исследовал:

  1. Разрешения на уровне пользователя (не можете просматривать страницы, пока вы не введете имя пользователя)
  2. Использование логического значения is_active (пользователь не считается активным, пока они не предоставят имя пользователя)
  3. PermissionRequiredMixin (добавить к каждому классу, который может увидеть вошедший в систему пользователь)
  4. UserPassesTestMixin (добавить в каждый класс, который потенциально может увидеть вошедший в систему пользователь)
  5. AccessMixin (добавить в каждый класс, который потенциально может увидеть вошедший в систему пользователь)
  6. Добавить свое собственное логическое поле в мою пользовательскую модель пользователя
  7. В каждом представлении проверять, является ли username нулевым, если оно есть, перенаправить на страницу формы имени пользователя (не похоже на элегантный подход)
  8. user_logged_in сигнал (кто-то еще не может обойти страницу формы имени пользователя)
  9. Middleware как-то?

My Concern

Пользователь проверяет электронную почту, регистрируется в первый раз, попадает на страницу имени пользователя. Я хочу, чтобы они создали имя пользователя на этой странице, прежде чем им будет разрешено go перейти на любую другую страницу. Я не хочу, чтобы они входили в систему и, возможно, вставляли другой адрес в адресную строку и обходили этот шаг.

Я бы хотел избежать ...

Добавление проверки в каждое представление, к которому у аутентифицированного пользователя будет иметь доступ.

То, что я пытаюсь сделать, похоже на принуждение кого-либо принять «Условия предоставления услуг» перед тем, как продолжать использовать веб-сайт. Мне нужно, чтобы они выбрали имя пользователя.

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

Я полностью понимаю, что этот вопрос является широким и спрашивает предложения, а не спецификацию кода c. Я обычно задаю подробные вопросы о коде c, но этот, я просто не знаю, как лучше подойти. Извините заранее.

1 Ответ

0 голосов
/ 14 апреля 2020

Ответ определенно был промежуточным ПО. В основном это выглядело так. Я создал новый Python файл с именем middleware.py в моем приложении, создал этот класс, а затем изменил область settings.py MIDDLEWARE, добавив в него этот класс.

from django.shortcuts import redirect, reverse

class SimpleMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

    def __call__(self, request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.

        response = self.get_response(request)
        if request.user.is_authenticated:
            if request.user.username is None:
                print(request.path)
                if not request.path == reverse('choose_username'):
                    return redirect(reverse('choose_username'))

        return response
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...