欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

1,建路由

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

2,前端頁(yè)面寫qq登錄的鏈接,本文沒有用圖標(biāo),暫時(shí)使用a鏈接請(qǐng)求。

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

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

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

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

4,后臺(tái)代碼

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)) # 定義一個(gè)隨機(jī)狀態(tài)碼,防止跨域偽造攻擊。
 request.session['state'] = state # 將隨機(jī)狀態(tài)碼存入Session,用于授權(quán)信息返回時(shí)驗(yàn)證。
 client_id = '101716344' # QQ互聯(lián)中網(wǎng)站應(yīng)用的APP ID。
 # 對(duì)回調(diào)地址進(jìn)行編碼,用戶同意授權(quán)后將調(diào)用此鏈接。
 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第三方登錄授權(quán)頁(yè)面
def returns(request):
 if request.session['state'] == request.GET['state']: # 驗(yàn)證狀態(tài)碼,防止跨域偽造攻擊。
  code = request.GET['code'] # 獲取用戶授權(quán)碼
  client_id = '101716344' # QQ互聯(lián)中網(wǎng)站應(yīng)用的APP ID。
  client_secret = '7f42aaac69f866750078fbe1edd9d2a4' # QQ互聯(lián)中網(wǎng)站應(yīng)用的APP Key。
  callback = parse.urlencode({'redirect_uri': 'http://127.0.0.1:8000/blog/returns'})
  # 對(duì)回調(diào)地址進(jìn)行編碼,用戶同意授權(quán)后將調(diào)用此鏈接。
  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'] # 從返回?cái)?shù)據(jù)中獲取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ù)據(jù)(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']
  # 返回路徑至網(wǎng)站首頁(yè)
  return redirect('/blog/index/')
 else:
  return HttpResponse('授權(quán)失敗!')

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

5,啟動(dòng)項(xiàng)目測(cè)試功能

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

總結(jié)

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

相關(guān)文章

  • python selenium 執(zhí)行完畢關(guān)閉chromedriver進(jìn)程示例

    python selenium 執(zhí)行完畢關(guān)閉chromedriver進(jìn)程示例

    今天小編就為大家分享一篇python selenium 執(zhí)行完畢關(guān)閉chromedriver進(jìn)程示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-11-11
  • python繪圖subplots函數(shù)使用模板的示例代碼

    python繪圖subplots函數(shù)使用模板的示例代碼

    這篇文章主要介紹了python繪圖subplots函數(shù)使用模板的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 導(dǎo)致python中import錯(cuò)誤的原因是什么

    導(dǎo)致python中import錯(cuò)誤的原因是什么

    在本篇文章里小編給大家整理了關(guān)于python的import錯(cuò)誤原因以及相關(guān)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • Python實(shí)現(xiàn)字符串匹配的KMP算法

    Python實(shí)現(xiàn)字符串匹配的KMP算法

    KMP算法的關(guān)鍵是利用匹配失敗后的信息,盡量減少模式串與主串的匹配次數(shù)以達(dá)到快速匹配的目的。這篇文章主要介紹了Python實(shí)現(xiàn)字符串匹配的KMP算法,需要的朋友可以參考下
    2019-04-04
  • python實(shí)現(xiàn)文本去重且不打亂原本順序

    python實(shí)現(xiàn)文本去重且不打亂原本順序

    這篇文章主要介紹了python實(shí)現(xiàn)文本去重且不打亂原本順序,需要的朋友可以參考下
    2016-01-01
  • 利用python檢查磁盤空間使用情況的代碼實(shí)現(xiàn)

    利用python檢查磁盤空間使用情況的代碼實(shí)現(xiàn)

    本文將向讀者展示如何利用Python編寫自動(dòng)化腳本,以檢查磁盤空間使用情況,無(wú)論你是經(jīng)驗(yàn)豐富的系統(tǒng)管理員,還是對(duì)Python自動(dòng)化充滿興趣的開發(fā)者,本文都將為你提供實(shí)用的腳本示例和詳細(xì)的解析步驟,幫助你快速掌握磁盤空間監(jiān)控的自動(dòng)化方法,需要的朋友可以參考下
    2024-08-08
  • python相對(duì)包導(dǎo)入報(bào)“Attempted?relative?import?in?non-package”錯(cuò)誤問題解決

    python相對(duì)包導(dǎo)入報(bào)“Attempted?relative?import?in?non-package”錯(cuò)誤

    這篇文章主要介紹了python相對(duì)包導(dǎo)入報(bào)“Attempted?relative?import?in?non-package”錯(cuò)誤,本文要在原理上解決?python當(dāng)中相對(duì)包導(dǎo)入出現(xiàn)的問題,需要的朋友可以參考下
    2023-02-02
  • Python中itertools庫(kù)的四個(gè)函數(shù)介紹

    Python中itertools庫(kù)的四個(gè)函數(shù)介紹

    這篇文章主要介紹了Python中itertools庫(kù)的四個(gè)函數(shù),主要討論itertools庫(kù)中的十分使用的幾個(gè)函數(shù),并重點(diǎn)介紹什么時(shí)候我們應(yīng)該考慮使用它們,需要的朋友可以參考一下
    2022-04-04
  • python爬蟲之爬取筆趣閣小說

    python爬蟲之爬取筆趣閣小說

    這篇文章主要介紹了python爬蟲之爬取筆趣閣小說,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python爬蟲的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-04-04
  • Python Web項(xiàng)目Cherrypy使用方法鏡像

    Python Web項(xiàng)目Cherrypy使用方法鏡像

    這篇文章主要介紹了Python Web項(xiàng)目Cherrypy使用方法鏡像,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論