博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从零开始用 Flask 搭建一个网站(四)
阅读量:7242 次
发布时间:2019-06-29

本文共 2972 字,大约阅读时间需要 9 分钟。

hot3.png

前言

介绍了网页前端与后端、前端与前端之间数据的交流。本节主要介绍一下如何应用 , 使用 Flask-OAuthlib 就可以轻松地请求第三方应用提供的 API。GitHub 上 example 给出了一些如何使用的简单例子,但是就实际运用来说还有需要注意的地方。

安装与初始化

在终端中使用命令:

pip install Flask-OAuthlib

或者:

easy_install Flask-OAuthlib

就可以完成自动安装。在项目中初始化 oauth 也是比较简单的, 以 QQ 为例:

from flask_oauthlib.client import OAuthapp = 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.tokengetterdef 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,这是一个。这里笔者使用的版本是 0.9.2。

以上就是关于 OAuthlib 使用的讲解。到此为止,我们一起学习了如何从零开始用 Flask 搭建了一个网站,我们的网址是: 一个极光宝盒控制台,可以用来集成第三方应用,并及时在手机上收到推送。比如使用使用极光宝盒集成一个 GitHub 应用,这样就可以监听自己以及团队的仓库,在别人提交 commit 或者 issue 后,可以及时反馈到手机上;也可以是自定义的集成,用于小组之间会议通知,活动通知等等。我们后续也会推出更多的第三方集成,感谢大家一直以来的支持,我们的。


作者:KenChoi - 极光

原文:

知乎专栏:

转载于:https://my.oschina.net/jpushtech/blog/880872

你可能感兴趣的文章
Exchange Server 2007灾难恢复(AD+Ex)
查看>>
GRUB2
查看>>
用Java数字签名提供XML安全
查看>>
我的友情链接
查看>>
从usb监控做起防公司泄密
查看>>
A case for Tmux tool
查看>>
linux利用screen命令管理远程会话
查看>>
switch-case语句问题
查看>>
Go性能优化技巧 1/10
查看>>
DNS 域名解析服务器---案例详解
查看>>
疑似电信版GALAXY S4现身官网 或配八核处理器
查看>>
我的Linux生涯之系统语言环境及中文输入法的操作
查看>>
c#获取当前页面名字
查看>>
客户端自动化技术漫谈
查看>>
mysql 优化之 查询
查看>>
TCP协议中的三次握手和四次挥手(图解)
查看>>
YII assets使用
查看>>
未来已来——工作空间 WorkSpace 和物联网 IoT (2)
查看>>
从零开始玩人工智能-机器人服务-05
查看>>
Google API V2申请及Google Map简单应用例子
查看>>