django实现qq一键登录(qq互联)

来源:互联网 发布:美工招聘信息 编辑:程序博客网 时间:2024/05/16 16:03
#在login登录url下留出qq登录url#eg:www.323.com/login?type=qqtp = 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
0 0