Django获取HTTP_REFERER触发KeyError问题求助
解决Django登录页HTTP_REFERER KeyError问题
问题原因
HTTP_REFERER 并非HTTP请求的必填头信息,当用户直接在地址栏输入登录页URL、通过书签访问,或者部分浏览器/隐私设置屏蔽了来源信息时,request.META中不会包含这个键,直接通过request.META['HTTP_REFERER']取值就会触发KeyError。
解决方案
方案1:安全获取HTTP_REFERER
使用字典的get()方法获取referer,不存在时返回空字符串,避免报错:
referer = request.META.get('HTTP_REFERER', '') if 'business' in referer: return redirect('panel_business:login_business')
或者先判断键是否存在再取值:
if 'HTTP_REFERER' in request.META and 'business' in request.META['HTTP_REFERER']: return redirect('panel_business:login_business')
方案2:利用next参数判断(更可靠)
观察你的请求URL包含next=/panel/business/,这个参数直接表示用户原本要访问的页面,用它判断比依赖HTTP_REFERER更稳定:
next_url = request.GET.get('next', '') if 'business' in next_url: return redirect('panel_business:login_business')
内容的提问来源于stack exchange,提问作者Arshia Haeri-Mehrizi
相关产品推荐
相关产品推荐

