最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django項目中實現(xiàn)使用qq第三方登錄功能

 更新時間:2019年08月13日 10:25:04   作者:記住我忘記我  
使用qq登錄的前提是已經在qq互聯(lián)官網創(chuàng)建網站應用并獲取到QQ互聯(lián)中網站應用的APP ID和APP KEY。這篇文章主要介紹了Django項目中實現(xiàn)使用qq第三方登錄功能,需要的朋友可以參考下

使用qq登錄的前提是已經在qq互聯(lián)官網創(chuàng)建網站應用并獲取到QQ互聯(lián)中網站應用的APP ID和APP KEY

1,建路由

#  qq登錄
 path('loginQq/',qq.loginQq,name='loginQq/'),
 path('returns/',qq.returns,name='returns/'),

2,前端頁面寫qq登錄的鏈接,本文沒有用圖標,暫時使用a鏈接請求。

<a data-wow-delay=".5s" href="/blog/loginQq/" rel="external nofollow" > » QQ登錄</a>

3,在項目的應用下創(chuàng)建utils文件夾并創(chuàng)建function.py用于封裝函數(shù),封裝的函數(shù)用于從返回數(shù)據中提取openid(騰訊公司數(shù)據庫里面的用戶id)

封裝的函數(shù)內容如下;

import re
def parse_jsonp(jsonp_str):
 try:
  return re.search('^[^(]*?\((.*)\)[^)]*$', jsonp_str).group(1)
 except:
  raise ValueError('無效數(shù)據!')

4,后臺代碼

from django.shortcuts import render,redirect,HttpResponse,HttpResponseRedirect
from blog.models import Member
from urllib import parse
from urllib import request as req
import re
import json
import random
from blog.utils import function
def loginQq(request):
 state = str(random.randrange(100000,999999)) # 定義一個隨機狀態(tài)碼,防止跨域偽造攻擊。
 request.session['state'] = state # 將隨機狀態(tài)碼存入Session,用于授權信息返回時驗證。
 client_id = '101716344' # QQ互聯(lián)中網站應用的APP ID。
 # 對回調地址進行編碼,用戶同意授權后將調用此鏈接。
 callback = parse.urlencode({'redirect_uri':'http://127.0.0.1:8000/blog/returns'}) #redirect_uri=http%3A%2F%2F127.0.0.1%3A8000%2Fblog%2Freturns
 # 組織QQ第三方登錄鏈接
 login_url = 'https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=%s&%s&state=%s'%(client_id,callback,state)
 return HttpResponseRedirect(login_url) # 重定向到QQ第三方登錄授權頁面
def returns(request):
 if request.session['state'] == request.GET['state']: # 驗證狀態(tài)碼,防止跨域偽造攻擊。
  code = request.GET['code'] # 獲取用戶授權碼
  client_id = '101716344' # QQ互聯(lián)中網站應用的APP ID。
  client_secret = '7f42aaac69f866750078fbe1edd9d2a4' # QQ互聯(lián)中網站應用的APP Key。
  callback = parse.urlencode({'redirect_uri': 'http://127.0.0.1:8000/blog/returns'})
  # 對回調地址進行編碼,用戶同意授權后將調用此鏈接。
  login_url = 'https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&code=%s&client_id=%s&client_secret=%s&%s' % (code, client_id, client_secret, callback) # 組織獲取訪問令牌的鏈接
  # return HttpResponse(login_url)
  response = req.urlopen(login_url).read().decode() # 打開獲取訪問令牌的鏈接 access_token:123456789&
  access_token = re.split('&', response)[0] # 獲取訪問令牌 access_token:123456789
  res = req.urlopen('https://graph.qq.com/oauth2.0/me?' + access_token).read().decode() # 打開獲取openid的鏈接
  openid = json.loads(function.parse_jsonp(res))['openid'] # 從返回數(shù)據中獲取openid 410225632333335556566
  userinfo = req.urlopen('https://graph.qq.com/user/get_user_info?oauth_consumer_key=%s&openid=%s&%s' % (
   client_id, openid, access_token)).read().decode() # 打開獲取用戶信息的鏈接
  # 打印查看獲取到的用戶信息
  print(userinfo)
  userinfo = json.loads(userinfo) # 將返回的用戶信息數(shù)據(JSON格式)讀取為字典。
  user = Member.objects.filter(member_qq_id=openid) # 查詢是否已存在用戶
  if not user: # 如果不存在用戶
   # 創(chuàng)建新用戶
   member_obj = Member.objects.create(member_qq_id=openid,member_nickname=userinfo['nickname'],member_name=userinfo['nickname'],member_photo = userinfo['figureurl_qq_1'])
   # user = Member() # 創(chuàng)建新用戶
   # user.member_qq_id = openid # 寫入用戶信息
   # user.member_nickname = userinfo['nickname'] # 寫入用戶信息
   # user.member_name = userinfo['nickname'] # 寫入用戶信息
   # # user.gender = userinfo['gender'] # 寫入用戶信息
   # user.member_photo = userinfo['figureurl_qq_1'] # 寫入用戶信息
   # user.save() # 保存或更新用戶
   request.session['member_id'] = member_obj.member_id # 將已登錄的用戶openid寫入Session
   request.session['member_name'] = userinfo['nickname']
  # 返回路徑至網站首頁
  return redirect('/blog/index/')
 else:
  return HttpResponse('授權失??!')

本文是在本地測試項目中的qq登錄功能,所以qq互聯(lián)官網中的回調地址需要修改為本地的地址,

5,啟動項目測試功能

6,查看數(shù)據庫會員表,會員信息已寫入。

總結

以上所述是小編給大家介紹的Django項目中實現(xiàn)使用qq第三方登錄功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

相關文章

最新評論

都江堰市| 光山县| 自贡市| 淳安县| 衡山县| 孝感市| 宜宾县| 平远县| 陇川县| 永川市| 成都市| 铜陵市| 错那县| 年辖:市辖区| 宜丰县| 县级市| 辽阳县| 调兵山市| 龙游县| 榆社县| 盐边县| 西盟| 嘉善县| 金平| 郎溪县| 正安县| 察隅县| 五原县| 寻乌县| 铅山县| 琼结县| 巴马| 长阳| 肥乡县| 永清县| 康保县| 秦皇岛市| 德清县| 张家口市| 永州市| 稷山县|