html appengine 重定向 URL
我想在用户在一个第三方网页上完成身份验证后,把他们重定向到下一个网址。在这个重定向的网址中,我希望包含一些关于用户的信息,比如会话ID。例如,我的重定向网址会是 www.z.appspot.com/?session=x/
。当用户返回到我的页面时,我想从这个新网址中提取一些他们的详细信息,比如 www.z.appspot.com/?access_code=x/?token=y&user_id=u
。但是在尝试提取这些信息时,系统无法识别网址中的token,因为它把这个token当成了会话的一部分。我试着用 &
来分隔,但还是没有成功。
3 个回答
1
你需要一个叫做 cgi 的模块,还有一个叫做 FieldStorage 的函数。可以这样做:
import cgi
url_parms = cgi.FieldStorage()
session = url_parms.getvalue("session","default")
你可以对任何 URL 参数这样操作。把“default”替换成你想要的默认值(比如一个空字符串)。
1
你的问题有点让人困惑,不过有没有什么原因让你的其他服务无法重定向到:www.z.appspot.com/?access_code=x/&token=y&user_id=u
?这个链接应该可以被正确解析:
import urlparse
import cgi
url = "www.z.appspot.com/?access_code=x/&token=y&user_id=u"
query = urlparse.urlparse(url).query
print cgi.parse_qs(query)
# output: {'access_code': ['x/'], 'token': ['y'], 'user_id': ['u']}
如果你不能改变这个网址的格式,你可以尝试这样做:
import urlparse
import cgi
url = "www.z.appspot.com/?access_code=x/?token=y&user_id=u"
query = urlparse.urlparse(url).query
access_code, query = query.split('?', 1)
access_code = access_code.split('=', 1)[1]
print access_code
# output: 'x/'
print cgi.parse_qs(query)
# output: {'token': ['y'], 'user_id': ['u']}
或者,如果你只是想知道如何在重定向到的网址中嵌入参数,可以看看Python的urlencode。
更新:
import urllib
encoded = urllib.urlencode({'app_id': 11,
'next': 'http://localhost:8086/?access_token=%s' % (access_token,)})
hunch_url = 'http://hunch.com/authorize/v1/?%s' % (encoded,)
然后把hunch_url
传递给你的模板。
0
看起来你要跳转的服务在处理继续链接中的查询参数时出了点问题。解决这个问题最简单的方法就是(就像我在你最初的问题中提到的)把参数放在路径里,而不是放在查询字符串中。也就是说,使用这样的链接格式:
http://www.yourapp.com/continue/1234
这里的 1234
是用户的会话ID或者用户ID。