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

前言

从零开始用 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 - 极光

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

知乎专栏:极光日报

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建BBS论坛是一个比较复杂的过程,需要涉及到多个方面的知识,包括前端开发、后端开发、服务器配置等。下面是一个基于Python的BBS论坛搭建指南,希望能够帮到你。 1. 确定论坛需求 在开始搭建之前,需要确定论坛的需求,包括用户登录、发帖、回帖、私信、管理后台等功能。根据需求确定所需要的技术栈和平台。 2. 选择开发框架 选择一个合适的开发框架可以减少不必要的麻烦,提高开发效率。常用的开发框架有Django、Flask等,这里以Django为例。 3. 安装Python和Django 在开始开发之前,需要安装Python和Django。推荐使用Python3.x版本,可以在Python官网下载安装包。安装完Python之后,可以通过pip命令安装Django: ``` pip install django ``` 4. 创建Django项目 使用Django的命令行工具可以快速创建一个新的项目: ``` django-admin startproject myproject ``` 其中myproject是你的项目名称。创建完毕后,可以进入myproject目录,执行以下命令启动开发服务器: ``` python manage.py runserver ``` 此时可以在浏览器中访问http://127.0.0.1:8000/,看到Django的欢迎页面。 5. 创建应用 Django的应用是项目的组成部分,可以包含多个模块。使用以下命令可以创建一个新的应用: ``` python manage.py startapp myapp ``` 其中myapp是你的应用名称。创建完毕后,需要将应用添加到项目中,在myproject/settings.py文件中添加以下代码: ```python INSTALLED_APPS = [ # ... 'myapp', ] ``` 6. 设计数据库模型 在开始开发之前,需要设计数据库模型,包括用户、帖子、回帖等数据表。可以使用Django的ORM(对象关系映射)框架来定义模型,ORM可以将Python对象映射到数据库中的表。 在myapp/models.py文件中定义模型,例如: ```python from django.db import models class User(models.Model): username = models.CharField(max_length=100) password = models.CharField(max_length=100) class Post(models.Model): title = models.CharField(max_length=100) content = models.TextField() author = models.ForeignKey(User, on_delete=models.CASCADE) class Comment(models.Model): content = models.TextField() author = models.ForeignKey(User, on_delete=models.CASCADE) post = models.ForeignKey(Post, on_delete=models.CASCADE) ``` 定义完模型后,需要在myproject/settings.py文件中配置数据库连接,例如使用SQLite数据库: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } ``` 7. 创建视图和路由 在Django中,视图是处理HTTP请求并返回HTTP响应的函数。可以在myapp/views.py文件中编写视图函数,例如: ```python from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse('Hello, World!') ``` 视图函数返回的是HTTP响应,可以包含HTML、CSS、JavaScript等内容。需要将视图函数和URL绑定起来,可以在myapp/urls.py文件中定义路由,例如: ```python from django.urls import path from . import views urlpatterns = [ path('', views.index), ] ``` 这样,访问http://127.0.0.1:8000/就可以看到Hello, World!了。 8. 开发前端页面 BBS论坛需要有良好的用户界面,可以使用HTML、CSS、JavaScript等技术编写前端页面。可以在myapp/templates目录中创建HTML模板文件,例如: ```html <!DOCTYPE html> <html> <head> <title>{{ title }}</title> </head> <body> <h1>{{ title }}</h1> {% for post in posts %} <h2>{{ post.title }}</h2> <p>{{ post.content }}</p> {% endfor %} </body> </html> ``` 可以在视图函数中使用render函数渲染模板,例如: ```python from django.shortcuts import render from .models import Post def index(request): posts = Post.objects.all() context = { 'title': 'My BBS', 'posts': posts, } return render(request, 'index.html', context) ``` 9. 实现用户认证 在BBS论坛中,需要实现用户认证功能,即用户注册、登录、注销等功能。Django提供了内置的用户认证系统,可以通过以下命令添加用户认证功能: ``` python manage.py migrate python manage.py createsuperuser ``` 这样就可以在myproject/admin页面登录管理员账户,管理用户和帖子等数据。 10. 部署服务器 在开发完成后,需要将BBS论坛部署到服务器上。可以使用云服务器,例如阿里云、腾讯云等,也可以使用自己的服务器。需要安装Web服务器软件(例如Nginx、Apache等)和数据库软件(例如MySQL、PostgreSQL等),并将Django项目部署到Web服务器上。 以上是基于Python的BBS论坛搭建指南,希望能够帮到你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值