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