[置顶] 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
相关文章推荐
- Google一些关键词的运用
- Golang tips ----- 函数
- go变量和数据类型
- 解决: WordPress无法建立到WordPress.org的安全连接
- HDU 1847 Good Luck in CET-4 Everybody!(博弈)
- Try Pangolin(2) - example: SimpleDisplay
- KDE子项目一览 good
- django-response对象
- go语言基本类型
- Google 推出全新的两步验证机制
- 许式伟《Go语言编程》样章“面向对象编程”
- Category的进阶问题
- google perftools分析程序性能
- mongo 查询 距离 某个点 多少 米距离 感谢 提供的数据。 感谢 mvc的 demo 。反正 就是各种感谢 文档之类的。
- Go语言学习笔记4
- golang 调用win32 api 实现windows注销、重启、关机
- Google的十大信条--来自官网
- go的markdown解析库和session库
- ubuntu下golang环境配置
- golang mgo 查询和更新内嵌文档