Django, Перенаправление персонала с логина на сайт администратора - PullRequest
2 голосов
/ 26 мая 2010

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

После входа в систему сотрудники должны перенаправить их на сайт администратора, но по какой-то причине перенаправление не происходит, оно остается на той же странице входа.

Я использую это условие в представлении входа в систему.

if user is not None and user.is_active and user.is_staff:
        auth.login(request,user)
        return HttpResponseRedirect("/admin/")

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

Спасибо, любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 23 февраля 2016

Один из способов входа в систему пользователей и перенаправления их в соответствии с их статусом может быть:

from django.shortcuts import redirect
from django.contrib.auth import authenticate, login


def user_login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username=username, password=password)

        if user.is_active:    
        # Redirecting to the required login according to user status.
            if user.is_superuser or user.is_staff:
                login(request, user)
                return redirect('/admin/')  # or your url name
            else:
                login(request, user)
                return redirect('/')  
1 голос
/ 14 августа 2012

Когда пользователь входит в систему, login () автоматически перенаправляет пользователя, пропуская следующую строку в вашем коде:

return HttpResponseRedirect("/admin/")

Две возможности:

  1. Если REDIRECT_FIELD_NAME (также известный как «next») существует в ваших полях REQUEST, то пользователь сразу же перенаправляется на него.

  2. Если REDIRECT_FIELD_NAME не найден, то пользователь перенаправляется на LOGIN_REDIRECT_URL, который вы могли определить в своем файле settings.py, а если нет, то он перенаправляет на значение по умолчанию для LOGIN_REDIRECT_URL.

Итак, похоже, что ваш код не устанавливает REDIRECT_FIELD_NAME, поэтому, естественно, все пользователи будут перенаправлены на путь LOGIN_REDIRECT_URL, каким бы это ни было.

Чтобы решить эту проблему, установите request.REQUEST ['next'] = '/ admin /', когда вы знаете, что пользователь является персоналом. Тогда перенаправление произойдет автоматически.

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