You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中通过年龄验证后如何重定向回原页面?

解决Django年龄验证后重定向回原页面的问题

你当前用HTTP_REFERER无法正确获取用户原本访问的页面,原因是当用户从主视图重定向到年龄验证页时,HTTP_REFERER会被覆盖为主视图的URL,而非用户最初请求的页面地址。以下是可靠的解决方案:

步骤1:主视图重定向时传递原页面URL参数

修改主视图的重定向逻辑,将用户当前请求的路径作为next参数传递给年龄验证页面:

def main_view(request):
    if request.session.has_key('agegate'):
        random_category = random.choice(Category.objects.all())
        random_picture = random.choice(CoreImages.objects.all())

        context = {
            'image' : random_picture,
            'category' : random_category,
            'bottles': Bottle.objects.all(),
        }
        return render(request,'Academy/home.html', context)
    else:
        # 获取用户当前访问的路径,作为next参数传递
        next_url = request.path
        return redirect(f'/preview/agegate?next={next_url}')

如果你的URL配置了名称,也可以用reverse更规范地生成跳转地址:

from django.urls import reverse

# ...
else:
    next_url = request.path
    agegate_url = f"{reverse('agegate')}?next={next_url}"
    return redirect(agegate_url)

步骤2:年龄验证视图获取并使用next参数

修改年龄验证视图,从GET参数中读取next值,验证通过后重定向到该地址(同时设置默认值,防止参数为空的情况):

def age_gate_view(request):
    # 从GET参数获取跳转目标,默认跳转到首页
    next_url = request.GET.get('next', '/')
    form = AgeGateForm()
    
    if request.method == 'POST':
        form = AgeGateForm(request.POST)
        if form.is_valid():
            form.save()
            request.session['agegate'] = 'welcome'
            return HttpResponseRedirect(next_url)
    
    context = {
        'form': form,
    }
    return render(request,'Academy/agegate.html', context)

补充说明

  • HTTP_REFERER是浏览器提供的请求头,不可靠:部分浏览器可能不发送该头,或者在重定向过程中会被覆盖,因此不适合用来保存跳转目标。
  • 传递next参数的方式更可控,能确保用户验证后回到最初请求的页面。

内容的提问来源于stack exchange,提问作者Thomas Doll-Datema

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 16:22:41