Django - 重定向后无法从URL中删除参数

时间:2016-05-07 15:57:25

标签: django redirect instagram-api

instagram api的认证过程返回作为参数附加到重定向URL的访问令牌,例如, redirect.com/#access_token=xxx

我目前正致力于获取访问令牌,将其保存在会话中,然后重定向到其他网址。但是,在重定向后,我只是得到了http://example.com/your-name/search/#access_token=xxx'并且参数仍然存在。我尝试过使用

GET = request.GET.copy()
GET.pop('#access_token')

但是我得到了一个' KeyError'虽然关键' access_token'显然在那里。

见下面我的urls.py

from django.conf.urls import url

From . import views

urlpatterns = [
   url(r'^search/', views.get_name, name='get_name'),
   url(r'^', views.index, name='index'),
]

和以下view.py

def index(request):

token = request.session.get('token')
if not token:
    token=request.GET.get('#access_token')

request.session['token'] = token

return HttpResponseRedirect(redirect_to='http://example.com/your-name/search/')

1 个答案:

答案 0 :(得分:1)

如果你的网址末尾有“#something”(称为“片段”),例如“http://myserver/#something”并且您将点击这样的链接,片段部分将不会被发送到服务器,因此您无法阅读它。

RFC3986 section 3.5

中描述了此行为
  

片段标识符在信息检索中具有特殊作用      系统作为客户端间接引用的主要形式,      允许作者专门识别现有的方面      资源只由资源所有者间接提供。如      这样,片段标识符不用于特定于方案      处理URI;相反,片段标识符是分开的      从取消引用之前的其余URI开始,从而得到      识别片段本身内的信息被解除引用      完全由用户代理完成,无论URI方案如何。

因此,片段无法用于服务器处理或重定向。