Джанго перенаправить правильный путь? - PullRequest
0 голосов
/ 09 декабря 2010

У меня есть похожий вопрос к этому -
Условное перенаправление входа в систему в Django

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

Я относительно новичок в Джанго. Я повторно использовал этот код откуда-то, что перенаправляет пользователя на страницу входа. Но после входа в систему я всегда попадаю на стартовую / домашнюю страницу пользователя. Я хочу, чтобы они видели страницу, которую они действительно запрашивали, а не домашнюю страницу пользователя все время. Можете ли вы сказать мне, что и где я могу внести изменения, это должно быть там, где я использую функцию 'redirect'. Я, вероятно, должен сохранить некоторую переменную сеанса и сделать это, но не совсем получая начальную точку. есть мысли?

Ниже приведен код -

def view_or_basicauth(view, request, test_func, realm = "", *args, **kwargs):
    if test_func(request.user): # Already logged in, just return the view.
        return view(request, *args, **kwargs)

    # They are not logged in. See if they provided login credentials
    if 'HTTP_AUTHORIZATION' in request.META:
        auth = request.META['HTTP_AUTHORIZATION'].split()
        if len(auth) == 2:
            # NOTE: We are only support basic authentication for now.
            if auth[0].lower() == "basic":
                uname, passwd = base64.b64decode(auth[1]).split(':')
                user = authenticate(username=uname, password=passwd)
                if user is not None:
                    if user.is_active:
                        login(request, user)
                        request.user = user
                        return view(request, *args, **kwargs)

    # Either they did not provide an authorization header or something in the authorization attempt  failed. Send a 401 back to them to ask them to authenticate.
    key = request.path.split('/')
    if len(key) > 1:
        base_url = request.get_host()
        return redirect( 'https://' + base_url + '/login/')

    s = '401 Unauthorized'
    response = HttpResponse(s)
    response.status_code = 401
    response['Content-Length'] = '%d' % len(s)
    response['WWW-Authenticate'] = 'Basic realm="%s"' % realm
    return response

Ответы [ 2 ]

1 голос
/ 15 декабря 2010

Это довольно просто:

Добавьте параметр GET в строку перенаправления, чтобы ваше представление входа в систему знало, откуда пришел ваш пользователь. Это может быть что угодно, но я использую "?redirect=myurl".

В вашем представлении входа в систему: проверьте наличие этого ключа (redirect) в GET при успешном входе в систему. Если он существует, перенаправить на значение.

Сначала измените строку перенаправления:

# add a GET parameter to your redirect line that is the current page
return redirect( 'https://' + base_url + '/login/?redirect=%s' % request.path )

Затем в окне входа в систему просто проверьте свою переменную в GET и перенаправьте на это значение, если оно существует.

# modify the login view to redirect to the specified url
def login(request):
    # login magic here.

    if login_successful:
        redirect = request.GET.get('redirect') # get url

        if redirect:
            # redirect if a url was specified
            return http.HttpResponseRedirect(redirect) 

        # otherwise redirect to some default
        return http.HttpResponseRedirect('/account/home/')
    # ... etc
0 голосов
/ 09 декабря 2010

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

...