2011-03-26 49 views
1

我想在第三方网页上进行身份验证后将用户重定向到下一个URL。在重定向URL中,我希望它包含有关用户的一些信息,即会话ID。例如,当用户返回到我的页面时,我的重定向URL将为www.z.appspot.com/?session=x/我想从新URL解析他们的某些详细信息,例如www.z.appspot.com/?access_code=x/?token=y&user_id=u,但在尝试解析信息时,无法在URL中看到该标记为它需要它成为会话的一部分。我尝试过使用&,但仍然没有快乐html appengine重定向URL

回答

0

它看起来像您要重定向到的服务不会正确地在继续URL中组成查询参数。解决这个问题的最简单的方法是(因为我在你原来的问题建议)的参数发送作为路径的一部分,而不是查询字符串 - 也就是说,使用形式的URL:

http://www.yourapp.com/continue/1234 

1234是用户的会话ID或用户ID。

1

您想要一个名为cgi的模块和一个名为FieldStorage的函数。这样做:

import cgi 

url_parms = cgi.FieldStorage() 
session = url_parms.getvalue("session","default") 

您可以对任何URL参数执行此操作。将默认值替换为默认值(如空字符串)。

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']} 

如果你不能改变URL的格式,你可以这样做:

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']} 

或者,如果你只是想问问如何嵌入它们将被重定向到的URL中的参数,请参阅Python的urlencode

更新

import urllib 
encoded = urllib.urlencode({'app_id': 11, 
          'next': 'http://localhost:8086/?access_tok­en=%s' % (access_token,)}) 
hunch_url = 'http://hunch.com/authorize/v1/?%s' % (encoded,) 

然后通过hunch_url到您的模板。

+0

我的用户最初使用4sq登录,然后创建一个会话,如果他们是一个新用户,我将它们重定向到使用'

\t \t \t \t \t \t
\t \t \t \t \t \t \t
\t
'等返回的URL是如上所述,我已经使用通过Hunch登录的用户,但在使用这个新参数时没有。 CGI模块会更理想吗? – Stina 2011-03-26 21:03:57

+0

@Stina,你需要urlencode下一个网址及其参数。看到我更新的答案。 – 2011-03-26 21:35:55