您的位置:首页 > 编程语言 > Go语言

[置顶] django实现qq一键登录(qq互联)

2016-07-03 16:37 645 查看
#在login登录url下留出qq登录url
#eg:www.323.com/login?type=qq

tp = request.GET.get('type',None)
if tp:
code_url = 'https://graph.qq.com/oauth2.0/authorize'
parm = {
'response_type':'code',
'client_id':'你的appid',
'redirect_uri':'www.323.com/qq',
'state':'test'
}
auth_url = '%s?%s'%(code_url, urlencode(parm))
return HttpResponseRedirect(auth_url)
else:
return render(request, 'login.html', locals())

#其中redirect_uri为回调url,qq服务器收到登录请求后调用你的后台实现
#www.323.com/qq  指向如下实现

#流程如下:
#1.www.323.com/login?type=qq
#2.--->跳转qq登录页面
#3.--->qq调用后台www.323.com/qq
#4.--->映射处理登录验证
#qq = QQ(^$#%%$)
#access_token = qq.get_access_token()
#openid = qq.get_openid(access_token)
#user_info = qq.get_userinfo(access_token,openid) #返回字典
#5.保持用户信息到本地数据库
#成功登录后跳转到登录前页面

#QQ登录
#token_url = 'https://graph.qq.com/oauth2.0/token'
#auth_url = 'https://graph.qq.com/oauth2.0/me'
class QQ(object):
def __init__(self,appid,appkey,token_url,auth_url,user_info_url,redirect_uri,code,state):
self.appid=appid
self.appkey=appkey
self.token_url=token_url
self.auth_url=auth_url
self.redirect_uri=redirect_uri
self.code=code
self.state=state
self.user_info_url = user_info_url

#获取access_token
def get_access_token(self):
parm = {
'grant_type':'authorization_code',
'client_id':self.appid,
'client_secret':self.appkey,
'redirect_uri':self.redirect_uri,
'code':self.code
}
try:
parm_token_url = '%s?%s'%(token_url, urlencode(parm))
req = urllib2.Request(parm_token_url)
resp = urllib2.urlopen(req)
content = resp.read()

access_token = urllib2.urlparse.parse_qs(content).get('access_token', [''])[0]
return access_token

except urllib2.URLError, e:
print e.reason

#获取OpenID
def get_openid(self,access_token):
try:
parm_auth_url = '%s?%s'%(self.auth_url, urlencode({'access_token': access_token,}))
req = urllib2.Request(parm_auth_url)
resp = urllib2.urlopen(req)
content = resp.read()
content = content[content.find('(')+1:content.rfind(')')]
data = json.loads(content)
openid = data.get('openid')
return openid

except urllib2.URLError, e:
print e.reason

#获取uerinfo
def get_userinfo(self,access_token,openid):
parm = {
'access_token':access_token,
'oauth_consumer_key':self.appid,
'openid':openid
}
try:
parm_user_info_url = '%s?%s'%(self.user_info_url, urlencode(parm))
req = urllib2.Request(parm_user_info_url)
resp = urllib2.urlopen(req)
content = resp.read()
user_info = json.loads(content)
return user_info
except urllib2.URLError, e:
print e.reason
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: