日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python实现qq登录_在django中实现QQ登录

發(fā)布時間:2025/1/21 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现qq登录_在django中实现QQ登录 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在服務(wù)器端做qq登錄的流程:

1.放置QQ登錄按鈕,這個去QQ的網(wǎng)站上下,把這個按鈕的連接指向

https://graph.qq.com/oauth2.0/authorize?response_type=code&

client_id=[YOUR_APPID]&redirect_uri=[YOUR_REDIRECT_URI]&scope=

[THE_SCOPE],也可以先指向自己的網(wǎng)站,然后再重定向過去,這樣可以避免APPID暴露;

2.在上面連接的redirect_uri的處理函數(shù)中獲取code;

3.

利用此code向https://graph.qq.com/oauth2.0

/token?grant_type=authorization_code&client_id=[YOUR_APP_ID]&

client_secret=[YOUR_APP_Key]&code=[The_AUTHORIZATION_CODE]&

state=[The_CLIENT_STATE]&redirect_uri=[YOUR_REDIRECT_URI]中請求

access_token,

4.得到返回的access_token后,再向https://graph.qq.com/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN請求獲取openid,

5.最后利用access_token與openid可以調(diào)用騰訊提供的其他API了。

那么對應(yīng)于django的web服務(wù)端,應(yīng)該怎么操作呢,步驟如下:

1.在QQ按鈕的請求地址進行重定向到qq那邊;

2.在對應(yīng)的redirect_uri中進行處理,獲取變量code的值;

#生成請求code的url

def get_code_url(self, crsf_token):

auth_url = '%s?%s'%(self.code_url, urllib.urlencode({

'response_type': 'code',

'client_id': self.appid,

'redirect_uri': self.redirect_url,

'scope': self.scope,

'state': crsf_token,

}))

return auth_url

#解析獲取code

def get_code(self, request):

return request.REQUEST.get('code')

3.用urllib2庫向qq請求access_token,獲取返回的access_token;

def get_token_url(self, code):

token_url = '%s?%s'%(self.token_url, urllib.urlencode({

'grant_type': 'authorization_code',

'client_id': self.appid,

'client_secret': self.appkey,

'code': code,

'redirect_uri': self.redirect_url,

}))

return token_url

def get_token(self, code):

token_url = self.get_token_url(code)

req = urllib2.Request(token_url)

resp = urllib2.urlopen(req)

content = resp.read()

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

return access_token

4.然后再用urllib2庫,access_token構(gòu)造請求獲取openid;

def get_openid_url(self, token):

openid_url = '%s?%s'%(self.openid_url, urllib.urlencode({

'access_token': token,

}))

return openid_url

def get_openid(self, token):

openid_url = self.get_openid_url(token)

req = urllib2.Request(openid_url)

resp = urllib2.urlopen(req)

content = resp.read()

content = content[content.find('(')+1:content.rfind(')')]

data = simplejson.loads(content)

return data.get('openid')

5.根據(jù)網(wǎng)站自己的賬戶規(guī)則,提示用戶

注冊本站的用戶名,郵箱號等(密碼可以不要),然后再數(shù)據(jù)庫中增加此賬號(如果你嫌麻煩,可以程序隨機生成一個賬號,不需要用戶填寫信息),再另一個表中

記錄openid,外鍵指向剛才的賬號,同時將username,openid,access_token,token_timestamp記入

session中。

新表的model如下:

class Company(models.Model):

company = models.CharField('company', max_length=20)

def __unicode__(self):

return self.company.decode('utf8')

class OpenId(models.Model):

user = models.ForeignKey(User, verbose_name='用戶')

company = models.ForeignKey(Company, verbose_name='公司')

openid = models.CharField('openid', max_length=100)

def __unicode__(self):

return u'%s, %s'%(self.user.username, self.company)

創(chuàng)建用戶,并與qq賬號關(guān)聯(lián)

def save(self, request):

username = self.cleaned_data.get("username")

email = self.cleaned_data["email"].strip().lower()

openid = request.session.get('openid')

company = request.session.get('company')

company = Company.objects.get(company__iexact=company)

if not (openid and company):

return None

new_user = self.create_user(username)

#EmailAddress.objects.add_email(new_user, email)

EmailAddress(user=new_user, email=email, verified=True, primary=True).save()

#OpenId.objects.add_openid(new_user, openid, company)

OpenId(user=new_user, openid=openid, company=company).save()

return new_user

6.至此,就可以調(diào)用qq提供的其他API了;

7.如果用戶沒有注銷,下

次登錄,直接根據(jù)cookie取session中的username,

openid,access_token,token_timestamp等數(shù)據(jù),根據(jù)token_timestamp判斷是否過期,如果過期,再重復(fù)步

驟1-3,并在session中更新access_token,token_timestamp;如果沒有過期,則就當(dāng)已經(jīng)登錄的正常用戶處理,可以直接

調(diào)用qq提供的API

8.如果用戶注銷,下次登錄,則直接重復(fù)1-4,根據(jù)openid反查出username等,存入session.

最后再說下調(diào)試,由于qq的key跟id都需要用域名去申請,并且傳遞的redirect_url也必須是這個域名的,所以在調(diào)試的時候,可以將自己的PC的host文件修改了,一般路徑為C:\Windows\System32\drivers\etc\host,大概修改如下(請注意替換你自己的域名):

192.168.1.63 www.mydomain.com

192.168.1.63 mydomain.com

分享到:

2012-05-26 14:58

瀏覽 1980

分類:互聯(lián)網(wǎng)

評論

總結(jié)

以上是生活随笔為你收集整理的python实现qq登录_在django中实现QQ登录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。