python - Django HTTP_REFERER 引用了错误的页面
问题描述
我有一个 django 应用程序,其中包含来自该homepage
链接的链接,该链接View1
重定向到View2
并且应该重定向回View1
. 但是,HTTP_REFERER
标头中View2
的homepage
引用者而不是 View1
。
主页模板
...
<!-- This links to the LoginView -->
<a href="{% url 'login' %}">Login</a>
...
登录视图
class LoginView(views.View):
def dispatch(self, request, *args, **kwargs):
if not request.session.test_cookie_worked():
request.session.set_test_cookie()
# This redirects to the create_captcha view
return redirect(reverse('create_captcha'))
return super().dispatch(request, *args, **kwargs)
create_captcha 视图
def create_captcha(request):
if not request.session.test_cookie_worked():
return render("Please enable cookies and try again.")
# This SHOULD redirect to LoginView but instead redirects to the homepage.
return redirect(to=request.META.get('HTTP_REFERER'))
预期行为:homepage link
-> LoginView
->create_captcha
->LoginView
实际行为:homepage link
-> LoginView
-> create_captcha
->homepage
问题:我如何HTTP_REFERER
指出LoginView
而不是主页?
解决方案
HTTP 标准中没有说明重定向后应该发生什么HTTP_REFERER
,因此您的代码将依赖于浏览器。此外,HTTP_REFERER
并不总是受到尊重/启用。
从您的代码看来,您可以直接重定向到 URL:
return redirect('login')
但我假设您想处理其他一些情况。
您最好在 URL 上添加一个查询字符串,例如:
return redirect(reverse('create_captcha') + '?next=' + reverse('login')
或者在现代 Python 上更好一点:
return redirect(f"{reverse('create_captcha')}?next={reverse('login')}")
在验证码视图中:
return redirect(request.GET['next'])
推荐阅读
- javascript - 在另一个 div 中创建 div
- c# - 如何将字符串参数作为 IformartProvider 传递
- c# - 如何对自定义 JsonConverter 进行单元测试
- google-cloud-platform - 从 Google Cloud Functions 构建 Docker 映像
- javascript - 为什么需要在 javascript Promises 中使用 .then() 方法?
- c# - Google Drive API Files.List() 错误 invalid_grant 错误请求
- c# - nuget还原后找不到文件
- c# - 在 Android 游戏中几分钟后 FPS 下降
- javascript - Css3 - 移除类的过渡
- jquery - jquery - 在btn点击时将布尔值重置为false