Перенаправление пользователя после входа в систему в Django

#python #django

#python #django

Вопрос:

Я пытаюсь реализовать свою страницу входа, чтобы она могла перенаправлять на определенную страницу на веб-сайтах. Когда пользователь нажимает на логин, он проверяет, является ли пользователь персоналом, затем отправляет пользователя на страницу администратора, а не пользователя, затем остается при входе в систему, если обычный пользователь, затем отправляет на страницу обычного пользователя. Я еще не завершил LoginView, потому что я просто хочу посмотреть, может ли он перейти на страницу администратора после входа в систему. Я исследовал онлайн и перепробовал много разных способов, но я не мог понять, как это сделать. Что я должен изменить или добавить в urls.py или LOGIN_URL/LOGIN_REDIRECT_URL. Спасибо!

url.py

 urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name='index'),
    path('output/', views.output, name="output"),
    path('default_crawler/', views.default_page, name="default_page"),
    path('admin_page/', views.admin_page, name="admin_page"),
    path('regular_page/', views.regular_page, name="regular_page"),
    path('pass_forgot/', views.pass_forgot, name="pass_forgot"),
    path('pass_change/', views.pass_change, name="pass_change"),
    path('pass_change_success/', views.pass_change_success,
         name="pass_change_success"),
    path('pass_found/', views.pass_found, name="pass_found"),
    path('register/', user_views.register, name="register"),
    path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
]   static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
  

views.py

 def LoginView(request):
    if request.method == 'POST':
        form = AuthenticationForm(request, request.POST)

        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(username=username, password=password)

            if user.is_staff:
                login(request, user)
                return redirect('admin_page')
            else:
                messages.error(request, "Invalid username or password")
        else:
            messages.error(request, "Invalid username or password")
    form = AuthenticationForm()
    return render(request, 'users/login.html', {'form': form})
  

settings.py

 LOGIN_URL
LOGIN_REDIRECT_URL
  

Ответ №1:

LOGIN_URL это параметр, используемый для перенаправления пользователей на страницу входа, когда, например, login_required() используется декоратор.

LOGIN_REDIRECT_URL используется для перенаправления пользователей после успешной попытки входа в систему.

Источник

Однако LOGIN_REDIRECT_URL допускается только один URL-адрес перенаправления, поэтому для вашего варианта использования я бы посоветовал установить его отдельно в представлении входа. Однако это не позволяет использовать этот next параметр в ваших запросах, поэтому имейте в виду, что это компромисс, если вы специально его не добавите.

Комментарии:

1. Я довольно новичок в django, и я не очень разбираюсь в этом. Где и как я должен изменить LoginView, чтобы он мог перенаправлять на страницу, которую я упомянул в сообщении?

Ответ №2:

Я знаю два способа перенаправления после входа / выхода из системы в django:

1. Вы можете перенаправлять после входа / выхода из системы в шаблонах html. Вам просто нужно использовать next параметр следующим образом:

 {% if user.is_authenticated %}          
    <a href="{% url 'logout' %}?next={% url 'app_name:after_logout' %}">{{ some_username }}</a>
{% else %}
    <a href="{% url 'login' %}?next={% url 'app_name:admin_page' %}">Login</a>
{% endif %}
  

Итак, если ваш сотрудник является администратором, вы перейдете к admin_page (‘admin_page /’)
Если вы хотите выйти из системы, вы перейдете на страницу с именем after_logout (я только что его придумал)

Или

2. Вам нужно добавить в settings.py

 LOGOUT_REDIRECT_URL = 'after_logout/'
LOGIN_REDIRECT_URL = 'admin_page/'