成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從零開(kāi)始用 Flask 搭建一個(gè)網(wǎng)站(四)

CarterLi / 2271人閱讀

摘要:前言從零開(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

相關(guān)文章

  • 從零開(kāi)始 Flask 搭建一個(gè)網(wǎng)站(三)

    摘要:從零開(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ì)講解...

    mykurisu 評(píng)論0 收藏0
  • 從零開(kāi)始 Flask 搭建一個(gè)網(wǎng)站(二)

    摘要:從零開(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)用...

    Coly 評(píng)論0 收藏0
  • 從零開(kāi)始搭建論壇(三):Flask框架簡(jiǎn)單介紹

    摘要:我們的論壇項(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)用程序中...

    Alan 評(píng)論0 收藏0
  • 從零開(kāi)始搭建論壇(一):Web服務(wù)器與Web框架

    摘要:服務(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)目好...

    dantezhao 評(píng)論0 收藏0
  • 從零開(kāi)始搭建論壇(二):Web服務(wù)器網(wǎng)關(guān)接口

    摘要:在從零開(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)越多...

    Astrian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<