使django rest框架成为被动的
djangorestframework-reactive的Python项目详细描述
这个包使常规的django rest框架视图变得被动, 这样,客户端应用程序可能会收到 底层数据一旦出现,就不需要轮询api 再一次。当初始请求作为常规http请求执行时,所有 更新通知来自websockets。
安装
先决条件
django rest框架的反应式扩展需要使用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>可以表示任何提交sha、分支名称、标记名称, 在DRF Reactive’s GitHub repository等。例如,要安装最新的 来自master分支的版本,使用:
pip install https://github.com/genialis/django-rest-framework-reactive/archive/master.tar.gz
配置
首先,将rest_framework_reactive添加到INSTALLED_APPS。
配置django频道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