资讯专栏INFORMATION COLUMN

从零开始用 Flask 搭建一个网站(四)

CarterLi / 2065人阅读

摘要:前言从零开始用搭建一个网站三介绍了网页前端与后端前端与前端之间数据的交流。作者极光为极光团队账号,欢迎关注原文从零开始用搭建一个网站四知乎专栏极光日报

前言

从零开始用 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 搭建一个网站(四)

知乎专栏:极光日报

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/8992.html

相关文章

  • 从零开始 Flask 搭建一个网站(三)

    摘要:从零开始用搭建一个网站二介绍了有关于数据库的运用,接下来我们在完善一下数据在前端以及前端到后端之间的交互。在中有和两个函数,分别是请求成功和失败的回调函数。作者极光为极光团队账号,欢迎关注原文从零开始用搭建一个网站三知乎专栏极光日报 从零开始用 Flask 搭建一个网站(二) 介绍了有关于数据库的运用,接下来我们在完善一下数据在前端以及前端到后端之间的交互。本节涉及到前端,因此也会讲解...

    mykurisu 评论0 收藏0
  • 从零开始 Flask 搭建一个网站(二)

    摘要:从零开始用搭建一个网站一介绍了如何搭建环境,以及应用基本项目结构。我们要搭建的网站是管理第三方集成的控制台,类似于。我们先定义一个用户模型然后在文件夹下创建一个文件。 从零开始用 Flask 搭建一个网站(一) 介绍了如何搭建 Python 环境,以及 Flask 应用基本项目结构。我们要搭建的网站是管理第三方集成的控制台,类似于 Slack。 本篇主要讲解数据如何在 Flask 应用...

    Coly 评论0 收藏0
  • 从零开始搭建论坛(三):Flask框架简单介绍

    摘要:我们的论坛项目就使用了该框架。此外,麦子学院也有一个入门视频教程,一共小时的视频教程,涵盖开发的方方面面,包括环境的搭建,语法介绍,项目结构的组织,全球化,单元测试等内容。博客地址更多阅读的机制三个框架的对比 前面两篇文章中我们已经了解 Web(HTTP)服务器,Web应用程序,Web框架,WSGI这些 Python Web 开发中的概念。我们知道,Web框架通过将不同Web应用程序中...

    Alan 评论0 收藏0
  • 从零开始搭建论坛(一):Web服务器与Web框架

    摘要:服务器通过协议与客户端通信,因此也被称为服务器。本文标题为从零开始搭建论坛一服务器与框架本文链接为更多阅读自己动手开发网络服务器一自己动手开发网络服务器二自己动手开发网络服务器三服务器网关接口实现原理分析最佳实践指南应用浅谈框架编程简介 之前用 Django 做过一个小的站点,感觉Django太过笨重,于是就准备换一个比较轻量级的 Web 框架来玩玩。Web.py 作者已经挂掉,项目好...

    dantezhao 评论0 收藏0
  • 从零开始搭建论坛(二):Web服务器网关接口

    摘要:在从零开始搭建论坛一服务器与框架中我们弄清楚了服务器应用程序框架的概念。框架应用生成状态码以及响应报头,然后将二者传递至,等待服务器保存。添加响应头,状态码返回响应信息创建一个服务器实例目前支持的成熟服务器有很多,是相当不错的一个。 在 从零开始搭建论坛(一):Web服务器与Web框架 中我们弄清楚了Web 服务器、Web 应用程序、Web框架的概念。对于 Python 来说,越来越多...

    Astrian 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<