【问题标题】:django python: Referrer to go two pages backdjango python:返回两页的推荐人
【发布时间】:2018-07-20 06:40:20
【问题描述】:

我知道使用 referrer = self.request.META.get('HTTP_REFERER') 可以找到上一页的引荐来源链接,但我需要更进一步,例如:referrer = self.request.META.get('HTTP_REFERER', -2) 也许?

【问题讨论】:

  • 我认为这是不可能的。你可以使用javascript'back()'方法吗?据我所知,出于安全/隐私原因,无法访问历史记录。如果这些页面在您自己的网站内,您可以将自己的历史记录存储在 cookie 或本地存储中
  • Django 的 META['HTTP_REFERER'] 只不过是 HTTP 的 Referer 标头。它只包含上一页的地址。

标签: python django referrer


【解决方案1】:

除非您实现一些 Session management 来存储用户浏览会话期间的引用历史记录,否则这是不可能的。

这可以通过custom Middleware 来实现:

1.在请求进来时获取当前用户会话。

2.将当前引用者添加到会话中的列表中。

session = request.session
referer = request.META.get("HTTP_REFERER")
if "referers" in session:
    session["referers"] = [referer]
else:
    session["referers"] = [referer] + session["referers"]

3.在您的视图中访问request.session["referers"] 属性。

if request.session["referers"] and len(request.session["referers"]) > 1:
    print(request.session["referers"][1])
else:
    print("Less than 1 referer")

我不会详细说明如何实现 Django 的会话存储或自定义中间件,因为这需要更多代码,因此您需要从文档中了解如何使用 Django 的中间件和会话存储。特别是你需要决定你想如何存储会话(如果你已经有一个数据库是一个简单的解决方案),你可能需要解决你的中间件的顺序,因为 Django 在它自己的中间件中初始化会话管理器,所以必须在访问会话之前执行。

这可能比您预期的要多,但是您需要将先前的引用者保存在某个地方并能够跟踪用户会话。

祝你好运。

【讨论】:

    【解决方案2】:

    this 的回答中得到一些启发,如果您只需要返回两页,您就可以这样做:

    return HttpResponse('<script>history.go(-2);</script>')
    

    请记住,这不会重新加载页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 2011-05-23
      • 2018-05-25
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      • 2019-07-20
      相关资源
      最近更新 更多