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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python flask框架发布问答平台注册页面_Python|Flask框架实现QQ账号登录

發布時間:2025/3/21 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python flask框架发布问答平台注册页面_Python|Flask框架实现QQ账号登录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文首發于微信公眾號:"算法與編程之美",歡迎關注,及時了解更多此系列文章。

前期準備

因為注冊QQ互聯需要已備案的網站,所以需要準備一個已備案的網站與域名。

首先訪問QQ互聯平臺https://connect.qq.com/,注冊成為開發者;

然后創建一個網站應用,等審核成功后會得到一個APP ID與APP KEY,后面會使用到。

開發流程

圖1 準備網站應用

1 前端放置登錄按鈕

在網站找一個合適的位置放置登錄按鈕(建議放置在首頁、登錄頁以及注冊頁)。登錄按鈕圖標在QQ互聯平臺下載,上面提供了多種樣式。效果如下:

圖2 登陸頁

具體HTMl代碼如下:

href="https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=YOURAPPID&redirect_uri=URL">

其中a標簽中 client_id 是最開始申請的APPID,redirect_uri是申請網站填寫的網站回調域。

這樣點開QQ登錄按鈕,就能跳轉到QQ登錄的界面:

圖3 轉跳后頁面

2 獲取Access Toke

當登錄成功后,會跳轉到剛剛所填寫的回調地址。并且url后面會跟上Authorization Code(此Code在10分鐘內過期)。接著通過Code值去獲取Access Token(Access Token是應用在調用OpenAPI訪問和修改用戶數據時必須傳入的參數)。

為了獲取Access Token需要請求:

https://graph.qq.com/oauth2.0/token,方式為GET,請求參數包括以下:

參數是否必須含義grant_type必須值為“authorization_code”。

client_id必須申請QQ登錄成功后,分配給網站的appid。

client_secret必須申請QQ登錄成功后,分配給網站的appkey。

code必須上一步返回的authorization code

redirect_uri必須與上面一步中傳入的redirect_uri保持一致。

如果成功返回,就可以得到Access Token。這一步具體代碼如下:@home.route('/mycb')

def mycb():

data = request.args.to_dict()

code = data.get('code') #獲取authorization code

url = 'https://graph.qq.com/oauth2.0/token'

body={'grant_type': 'authorization_code', 'client_id': '101860781','client_secret':'0f5a014e13e7d35fbcca51ecc2ff6745','code':code,'redirect_uri':'https://yujl.top/mycb'}

#body為上面所說的請求參數

response = requests.get(url, params=body) #發送GET請求

token = response.text 得到返回包

token_url = '?' + token

requests.session().close() #關閉請求

return redirect('/token' + token_url)

由于返回回來的包格式為:access_token=61897CE***************D444F968BD2A&expires_in=77**000&refresh_token=0018693**************6009D9C2EFBE

這樣不能直接轉換為json格式,所以將這個包作為參數然后轉發到/token,以此來得到json格式的token。@home.route('/token')

def token():

data = request.args.to_dict() #得到access_token、expires_in、refresh_token

3 通過access_token來獲取open_id

接著需要通過access_token來獲取open_id(openid是此網站上唯一對應用戶身份的標識,網站可將此ID進行存儲便于用戶下次登錄時辨識其身份)。

請求地址為https://graph.qq.com/oauth2.0/me,方法還是GET,參數就是上面獲取到的access_token。具體方法為:def get_openid(data): data為token得到的數據包

url = 'https://graph.qq.com/oauth2.0/me'

body = {'access_token': data.get('access_token')}

response = requests.get(url, params=body)

open_id = json.loads(response.text[10:-4])

open_id = open_id.get('openid')

requests.session().close()

return open_id

4 調用OpenAPI

得到open_id就可以調用OpenAPI了,API列表如下:

圖4 API列表

接下來以get_user_info 為例:

還是以GET方式請求:

https://graph.qq.com/user/get_user_info,

需要的參數有access_token、oauth_consumer_key(APP ID)、openid。代碼示例:def get_user_info(data, open_id):

url = 'https://graph.qq.com/user/get_user_info'

body={'access_token':data.get('access_token'), 'oauth_consumer_key': '101860781', 'openid': open_id}

response = requests.get(url, params=body)

user_info = response.json()

requests.session().close()

return user_info

返回的參數說明:

圖5 參數說明

5 保存用戶數據

到這一步,基本就完成了。接著就是根據自己的需要,可以在user界面展示昵稱和頭像,和選擇存進數據庫了。選擇將open_id作為用戶的唯一標識符存進數據庫,這樣用戶在后面登錄的時候可以得到上次保存的信息。以下是這部分代碼:@home.route('/token')

def token():

data = request.args.to_dict()

open_id = get_openid(data)

user_info = get_user_info(data, open_id)

uuid_count=User.query.filter_by(uuid=open_id).count()

#查詢openid是否存在。

if uuid_count == 1:

#如果存在就根據openid查到用戶信息,并添加到session空間里。

name = User.query.filter_by(uuid=open_id).first()

session['home'] = name.name

return redirect('/user')

else:

#如果不存在,也就是第一次登錄,給一個默認的密碼(經過hash加密)

password = generate_password_hash('123456')

hash_name = str(hash(random.randint(1000,9999)))

name = user_info.get('nickname') + hash_name

#因為我的網站是不允許重名的,所以在qq的昵稱后面加上一個隨機數。

user = User(

name=name, #添加了隨機數的用戶名

uuid=open_id, #唯一標識符

pwd = password, #密碼

face=user_info.get('figureurl_1') #頭像

)#將相關信息存進數據庫

db.session.add(user)

db.session.commit()

session['home'] = name #將用戶名添加到session空間中。

return redirect('/user') # 重定向到user界面。

總結

以上是生活随笔為你收集整理的python flask框架发布问答平台注册页面_Python|Flask框架实现QQ账号登录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。