Как отключить регистрацию, если пользователь вошел в систему? - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть сайт с регистрацией пользователя и логином. И то и другое работает нормально, но страницу регистрации все равно можно открыть, когда пользователь вошел в систему. Может быть, есть что-то вроде декоратора @logout_required, который я могу обернуть вокруг вида регистрации?

Ответы [ 3 ]

0 голосов
/ 10 ноября 2019

Я предполагаю, что у вас есть HTML-файл с навигационной панелью для объяснения того, что необходимо сделать:

Вы можете поместить этот код в файл шаблона для достижения этой цели:


 <nav>
    <div class="nav-wrapper">
      <a href="/" class="brand-logo">Name</a>
      <ul id="nav-mobile" class="right hide-on-med-and-down">

        {% if user.is_authenticated %}
          <li>
             <a href="/">logout</a>
         </li>

        {% else %}
            <li>
            <a href="/login">Login</a>
            </li>

            <li>
            <a href="/">Register</a>
            </li>
          {% endif %}
      </ul>
    </div>
  </nav>

0 голосов
/ 10 ноября 2019

Вы можете решить эту проблему с помощью декоратора user_passes_test: https://docs.djangoproject.com/en/2.2/topics/auth/default/#django.contrib.auth.decorators.user_passes_test

from django.contrib.auth.decorators import user_passes_test

def not_logged_in(user):
  return not user.is_authenticated

@user_passes_test(not_logged_in)
def my_view(request):
  #do stuff
0 голосов
/ 10 ноября 2019

Все просто. В представлении регистрации просто добавьте простой оператор if, чтобы проверить, вошел ли пользователь в систему или нет.

def registration(request):
    if request.user.is_authenticated:
        #prevent user registration
        #...

вы можете использовать то же решение для CBV (используя self.request.user.is_authenticated).

или если вы хотите сделать это в своем шаблоне (например, запретить зарегистрированному пользователю просматривать форму регистрации):

{% if not request.user.is_authenticated %}
    ...
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...