HttpResponseRedirect将传递的url附加到当前url

时间:2014-01-19 18:48:26

标签: django httpresponse

我正在使用djnago HttpResponseRedirect在登录后返回上一页。问题是,我提供了错误的重定向网址(next网址和当前网址的组合)

假设我已经从“mysite.com/home”进入并且登录页面网址为“mysite.com/login”我想返回“mysite.com/home”但是重定向网址是mysite.com/login/?next=/home /

我做错了什么?

这是我的view,负责登录:

if request.method == 'POST':
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)

            # next is "/home/" and that is exactly what I expect
            return HttpResponseRedirect(request.GET.get('next', reverse('products.views.show_homePage')))

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题!

试试这个:

return HttpResponseRedirect(reverse('products.views.show_homePage'))

请务必明确包含:from django.core.urlresolvers import reverse

这将使页面发送重定向到您的主页..希望..

这是我做的:

登录:

# Login
def login(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect("/test/")  # Redirect to a tool directory page.
    form = loginForm(request.POST or None)
    if request.POST and form.is_valid():
        user = form.login(request)
        if user:
            auth_login(request, user)
            return HttpResponseRedirect("/test/")  # Redirect to a success page.
    return render(request, 'login.html', {'form': form})

注销:

# Logout user method 
def logout(request):
    auth_logout(request)
    return HttpResponseRedirect(reverse('loginregistration.views.login'))  # Redirect to a success page.

答案 1 :(得分:0)

以下为我工作的作品: HttpResponseRedirect类 使用三种类型的网址:

(1)完全限定的URL,例如'https://www.yahoo.com/search/'

(2)没有域的绝对路径,例如'/ search /'

(3)相对路径,例如'search /'

如果您的函数未返回 完全限定的URL ,则可能是将url附加到现有url的可能原因。

有关更多信息,请参考Django官方文档: https://docs.djangoproject.com/en/3.0/ref/request-response/