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