Pusher 的烧瓶扩展
项目描述
Flask-Pusher
Pusher 的烧瓶扩展。它是官方客户端的一个瘦包装器,将 Flask 应用程序绑定到 Pusher 客户端。
安装
Flask-Pusher从 PyPI安装模块。
pip install Flask-Pusher
配置
Pusher 的基本配置是app_id,key和secret。这些值在 Pusher Web 界面中可用。
PUSHER_APP_ID = 'your-pusher-app-id'
PUSHER_KEY = 'your-pusher-key'
PUSHER_SECRET = 'your-pusher-secret'
您可以使用以下配置连接到自定义主机/端口:
PUSHER_HOST = 'api.pusherapp.com'
PUSHER_PORT = '80'
扩展自动配置 Pusher 编码器以使用app.json_encoder.
用法
此扩展简化了 Pusher 配置并将客户端绑定到您的应用程序。
from flask import Flask
from flask_pusher import Pusher
app = Flask(__name__)
pusher = Pusher(app)
# Use pusher = Pusher(app, url_prefix="/yourpath") to mount the plugin in another path
该扩展为您提供了两种访问推送客户端的方法:
# you can just get the client from current_app
client = current_app.extensions["pusher"]
# or you can get it from the extension
client = pusher.client
在这两种情况下,它都是对推送客户端的引用。
client.trigger('channel_name', 'event', {
'message': msg,
})
在此处查看 Pusher python 客户端的文档:http: //pusher.com/docs/server_api_guide#/lang=python
推送者身份验证
Pusher 具有经过身份验证的私人和在线通道。Flask-Pusher创建/pusher/auth处理它的路线。要支持这些经过身份验证的路由,只需使用@pusher.auth.
此函数必须为授权用户True和False未授权用户返回。它发生在请求上下文中,因此您拥有所有Flask功能,例如Flask-Login当前用户。
设置PUSHER_AUTH配置以更改身份验证端点。默认值为/auth。
from flask_login import current_user
@pusher.auth
def pusher_auth(channel_name, socket_id):
if 'foo' in channel_name:
# refuse foo channels
return False
# authorize only authenticated users
return current_user.is_authenticated()
它还透明地支持批量身份验证,基于pusher-js-auth:https://github.com/dirkbonhomme/pusher-js-auth`。为批处理中的每个通道调用身份验证函数。
在此处阅读有关用户身份验证的更多信息:http: //pusher.com/docs/authenticating_users
推送通道数据
存在渠道需要channel_data. Flask-Pusher默认情况下
user_id使用发送socket_id,因为它是必填字段。
@pusher.channel_data为您提供了一种设置其他值的方法。如果user_id
返回一个键,它会覆盖默认值user_id。
from flask_login import current_user
@pusher.channel_data
def pusher_channel_data(channel_name, socket_id):
return {
"name": current_user.name
}
Pusher webhook
Pusher 具有用于将 websocket 事件发送到您的服务器的 webhook。
Flask-Pusher 创建路由来处理这些 webhook 并验证标头X-Pusher-Key和X-Pusher-Signature.
from flask import request
@pusher.webhooks.channel_existence
def channel_existence_webhook():
print request.json
@pusher.webhooks.presence
def presence_webhook():
print request.json
@pusher.webhooks.client
def client_webhook():
print request.json
JSON 请求记录在 Pusher 文档中:http: //pusher.com/docs/webhooks
这些 webhook 路由安装在/pusher/events/channel_existence和/pusher/events/presence中/pusher/events/client。配置您的 Pusher 应用程序以将 webhook 发送到这些路由。
免责声明
这个项目不隶属于 Pusher 或 Flask。