跳转到主要内容

使Django REST Framework变得反应式

项目描述

Build Status Documentation Status Version on PyPI Supported Python versions Number of downloads from PyPI Code style: black

此包使 Django REST Framework 视图变为响应式,即客户端应用程序可以在数据发生变化时立即通知底层数据的变化,而无需再次轮询 API。虽然初始请求是以常规 HTTP 请求完成的,但所有更新通知都通过 WebSocket 进行。

安装

先决条件

Django REST Framework 的响应式扩展需要使用 Django Channels 通过 WebSocket 进行推送通知。

从 PyPI

pip install djangorestframework-reactive

从源码

pip install https://github.com/genialis/django-rest-framework-reactive/archive/<git-tree-ish>.tar.gz

其中 <git-tree-ish> 可以代表 DRF Reactive 的 GitHub 仓库 中的任何提交 SHA、分支名称、标签名称等。例如,要从 master 分支安装最新版本,请使用

pip install https://github.com/genialis/django-rest-framework-reactive/archive/master.tar.gz

配置

首先,将 rest_framework_reactive 添加到 INSTALLED_APPS

配置你的 Django Channels routing.py 以包括所需的路径

from django.urls import path

from channels.routing import ChannelNameRouter, ProtocolTypeRouter, URLRouter

from rest_framework_reactive.consumers import ClientConsumer, MainConsumer, WorkerConsumer
from rest_framework_reactive.protocol import CHANNEL_MAIN, CHANNEL_WORKER

application = ProtocolTypeRouter({
    # Client-facing consumers.
    'websocket': URLRouter([
        # To change the prefix, you can import ClientConsumer in your custom
        # Channels routing definitions instead of using these defaults.
        path('ws/<slug:subscriber_id>', ClientConsumer),
    ]),

    # Background worker consumers.
    'channel': ChannelNameRouter({
        CHANNEL_MAIN: MainConsumer,
        CHANNEL_WORKER: WorkerConsumer,
    })
})

此外,urls.py 需要更新以包括一些额外的路径

urlpatterns = [
  # ...
  url(r'^api/queryobserver/', include('rest_framework_reactive.api_urls')),
  # ...
]

运行

除了运行一个 Django 应用程序服务器实例之外,您还需要运行一个单独的观察者工作进程(或多个工作进程)。您可以运行以下命令来启动它

python manage.py runworker rest_framework_reactive.main rest_framework_reactive.worker

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源代码分布

djangorestframework-reactive-7.0.2.tar.gz (35.5 kB 查看哈希值)

上传时间 源代码

构建分布

djangorestframework_reactive-7.0.2-py3-none-any.whl (26.7 kB 查看哈希值)

上传于 Python 3