摘要:前言從零開(kāi)始用搭建一個(gè)網(wǎng)站三介紹了網(wǎng)頁(yè)前端與后端前端與前端之間數(shù)據(jù)的交流。作者極光為極光團(tuán)隊(duì)賬號(hào),歡迎關(guān)注原文從零開(kāi)始用搭建一個(gè)網(wǎng)站四知乎專欄極光日?qǐng)?bào)
前言
從零開(kāi)始用 Flask 搭建一個(gè)網(wǎng)站(三) 介紹了網(wǎng)頁(yè)前端與后端、前端與前端之間數(shù)據(jù)的交流。本節(jié)主要介紹一下如何應(yīng)用 Flask-OAuthlib, 使用 Flask-OAuthlib 就可以輕松地請(qǐng)求第三方應(yīng)用提供的 API 。 GitHub 上 example 給出了一些如何使用的簡(jiǎn)單例子,但是就實(shí)際運(yùn)用來(lái)說(shuō)還有需要注意的地方。
安裝與初始化
在終端中使用命令:
pip install Flask-OAuthlib
或者:
easy_install Flask-OAuthlib
就可以完成自動(dòng)安裝。在項(xiàng)目中初始化 oauth 也是比較簡(jiǎn)單的, 以 QQ 為例:
from flask_oauthlib.client import OAuth app = Flask(__name__) oauth = OAuth(app) qq = oauth.remote_app( "qq", consumer_key=QQ_APP_ID, consumer_secret=QQ_APP_KEY, base_url="https://graph.qq.com", request_token_url=None, request_token_params={"scope": "get_user_info"}, access_token_url="/oauth2.0/token", authorize_url="/oauth2.0/authorize", )
需要注意的是 consumer_key 以及 consumer_secret ,這兩個(gè)要替換成自己在第三方提供者中申請(qǐng)的應(yīng)用的 App_ID 以及 App_Key 。如果是生產(chǎn)環(huán)境,通常要把這兩個(gè)參數(shù)放到環(huán)境變量中。其他的參數(shù)值在第三方的開(kāi)發(fā)者文檔中都有提供。另外這個(gè) scope 字段的值表明了在應(yīng)用中你請(qǐng)求的 token 的實(shí)際使用權(quán)限,上面的權(quán)限僅僅是 get_user_info 。這個(gè)范圍可以視自己的需求而定。
請(qǐng)求數(shù)據(jù)
首先來(lái)介紹一下第三方登錄,在點(diǎn)擊登錄后,登錄按鈕觸發(fā)的視圖函數(shù)如下:
@main.route("/login") def login(): return qq.authorize(callback=url_for("main.authorized", _external=True))
這個(gè) authorize 函數(shù)會(huì)發(fā)送一個(gè)請(qǐng)求,跳轉(zhuǎn)到第三方登錄界面,用戶登錄完成后,將會(huì)回調(diào)傳遞的 Url ,返回一個(gè)帶授權(quán) token 的響應(yīng):
@main.route("/login/authorized") def authorized(): resp = qq.authorized_response() if resp is None: return "Access denied: reason=%s error=%s" % ( request.args["error_reason"], request.args["error_description"] ) session["qq_token"] = (resp["access_token"], "")
這里把 token 存儲(chǔ)在 session 中,方便下次使用。使用 OAuthlib 可以發(fā)起 Http 請(qǐng)求,比如 GET 請(qǐng)求:
respMe = qq.get("/oauth2.0/me", {"access_token": session["qq_token"][0]})
這里傳了一個(gè) access_token 參數(shù),需要注意的是這個(gè) token 是一個(gè)元組:(“ token ”, ""),第二個(gè)元素為空。在使用這些 Http 請(qǐng)求時(shí),如果沒(méi)有帶上 token ,必須使用 oauthlib 提供的 tokengetter 修飾器定義一個(gè)返回 token 的函數(shù):
@qq.tokengetter def get_qq_oauth_token(): return session.get("qq_token")
這里返回的 token 也是一個(gè)元組,而不是字符串。在定義了獲取 token 的函數(shù)后,就可以不帶 access_token 參數(shù)了, oauthlib 將會(huì)自動(dòng)調(diào)用這個(gè)函數(shù)得到 token 。比如:
response = github.get("user") username = response.data["login"]
如果要在請(qǐng)求中傳遞數(shù)據(jù),可以這樣:
data_dict = { "name": "web", "active": True, "events": [ "push", "commit_comment", "pull_request", "issues", "issue_comment" ], "config": { "url": "http://your webhook", "content_type": "json" } } response = github.post("https://api.github.com/repos/{user}/{repo}/hooks", data=data_dict, format="json")
上面是 github 中創(chuàng)建 Webhook 的示例,在 data 中傳遞了一個(gè)字典,這個(gè)字典將會(huì)被解析為 Json 對(duì)象并被保留在請(qǐng)求的 body 中。 OAuthlib 0.9.3 版本除了 GET 請(qǐng)求以外必須攜帶一個(gè) data ,這是一個(gè)已知的 bug。這里筆者使用的版本是 0.9.2 。
以上就是關(guān)于 OAuthlib 使用的講解。到此為止,我們一起學(xué)習(xí)了如何從零開(kāi)始用 Flask 搭建了一個(gè)網(wǎng)站,我們的網(wǎng)址是: http://jbox.jiguang.cn/ 一個(gè)極光寶盒控制臺(tái),可以用來(lái)集成第三方應(yīng)用,并及時(shí)在手機(jī)上收到推送。比如使用使用極光寶盒集成一個(gè) GitHub 應(yīng)用,這樣就可以監(jiān)聽(tīng)自己以及團(tuán)隊(duì)的倉(cāng)庫(kù),在別人提交 commit 或者 issue 后,可以及時(shí)反饋到手機(jī)上;也可以是自定義的集成,用于小組之間會(huì)議通知,活動(dòng)通知等等。我們后續(xù)也會(huì)推出更多的第三方集成,感謝大家一直以來(lái)的支持,我們的源碼在 GitHub 上。
作者: KenChoi - 極光( JPush 為極光團(tuán)隊(duì)賬號(hào),歡迎關(guān)注)
原文:從零開(kāi)始用 Flask 搭建一個(gè)網(wǎng)站(四)
知乎專欄:極光日?qǐng)?bào)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/8992.html
摘要:從零開(kāi)始用搭建一個(gè)網(wǎng)站二介紹了有關(guān)于數(shù)據(jù)庫(kù)的運(yùn)用,接下來(lái)我們?cè)谕晟埔幌聰?shù)據(jù)在前端以及前端到后端之間的交互。在中有和兩個(gè)函數(shù),分別是請(qǐng)求成功和失敗的回調(diào)函數(shù)。作者極光為極光團(tuán)隊(duì)賬號(hào),歡迎關(guān)注原文從零開(kāi)始用搭建一個(gè)網(wǎng)站三知乎專欄極光日?qǐng)?bào) 從零開(kāi)始用 Flask 搭建一個(gè)網(wǎng)站(二) 介紹了有關(guān)于數(shù)據(jù)庫(kù)的運(yùn)用,接下來(lái)我們?cè)谕晟埔幌聰?shù)據(jù)在前端以及前端到后端之間的交互。本節(jié)涉及到前端,因此也會(huì)講解...
摘要:從零開(kāi)始用搭建一個(gè)網(wǎng)站一介紹了如何搭建環(huán)境,以及應(yīng)用基本項(xiàng)目結(jié)構(gòu)。我們要搭建的網(wǎng)站是管理第三方集成的控制臺(tái),類似于。我們先定義一個(gè)用戶模型然后在文件夾下創(chuàng)建一個(gè)文件。 從零開(kāi)始用 Flask 搭建一個(gè)網(wǎng)站(一) 介紹了如何搭建 Python 環(huán)境,以及 Flask 應(yīng)用基本項(xiàng)目結(jié)構(gòu)。我們要搭建的網(wǎng)站是管理第三方集成的控制臺(tái),類似于 Slack。 本篇主要講解數(shù)據(jù)如何在 Flask 應(yīng)用...
摘要:我們的論壇項(xiàng)目就使用了該框架。此外,麥子學(xué)院也有一個(gè)入門視頻教程,一共小時(shí)的視頻教程,涵蓋開(kāi)發(fā)的方方面面,包括環(huán)境的搭建,語(yǔ)法介紹,項(xiàng)目結(jié)構(gòu)的組織,全球化,單元測(cè)試等內(nèi)容。博客地址更多閱讀的機(jī)制三個(gè)框架的對(duì)比 前面兩篇文章中我們已經(jīng)了解 Web(HTTP)服務(wù)器,Web應(yīng)用程序,Web框架,WSGI這些 Python Web 開(kāi)發(fā)中的概念。我們知道,Web框架通過(guò)將不同Web應(yīng)用程序中...
摘要:服務(wù)器通過(guò)協(xié)議與客戶端通信,因此也被稱為服務(wù)器。本文標(biāo)題為從零開(kāi)始搭建論壇一服務(wù)器與框架本文鏈接為更多閱讀自己動(dòng)手開(kāi)發(fā)網(wǎng)絡(luò)服務(wù)器一自己動(dòng)手開(kāi)發(fā)網(wǎng)絡(luò)服務(wù)器二自己動(dòng)手開(kāi)發(fā)網(wǎng)絡(luò)服務(wù)器三服務(wù)器網(wǎng)關(guān)接口實(shí)現(xiàn)原理分析最佳實(shí)踐指南應(yīng)用淺談框架編程簡(jiǎn)介 之前用 Django 做過(guò)一個(gè)小的站點(diǎn),感覺(jué)Django太過(guò)笨重,于是就準(zhǔn)備換一個(gè)比較輕量級(jí)的 Web 框架來(lái)玩玩。Web.py 作者已經(jīng)掛掉,項(xiàng)目好...
摘要:在從零開(kāi)始搭建論壇一服務(wù)器與框架中我們弄清楚了服務(wù)器應(yīng)用程序框架的概念??蚣軕?yīng)用生成狀態(tài)碼以及響應(yīng)報(bào)頭,然后將二者傳遞至,等待服務(wù)器保存。添加響應(yīng)頭,狀態(tài)碼返回響應(yīng)信息創(chuàng)建一個(gè)服務(wù)器實(shí)例目前支持的成熟服務(wù)器有很多,是相當(dāng)不錯(cuò)的一個(gè)。 在 從零開(kāi)始搭建論壇(一):Web服務(wù)器與Web框架 中我們弄清楚了Web 服務(wù)器、Web 應(yīng)用程序、Web框架的概念。對(duì)于 Python 來(lái)說(shuō),越來(lái)越多...
閱讀 680·2021-11-25 09:43
閱讀 1959·2021-11-17 09:33
閱讀 864·2021-09-07 09:58
閱讀 2095·2021-08-16 10:52
閱讀 509·2019-08-30 15:52
閱讀 1747·2019-08-30 15:43
閱讀 1076·2019-08-30 15:43
閱讀 2956·2019-08-29 16:41