为django rest framework和pusher提供易于使用的类混合,以保持api的实时性。

drf-model-pusher的Python项目详细描述


PyPI versionBuild Status

DRF型号推进器

易于使用类混合,用于Django Rest FrameworkPusher,以保持API的实时性。

安装

从pypi下载:

pip install drf_model_pusher

配置

设置配置

在您的设置中,设置推进器应用程序ID和凭据,群集是可选的

PUSHER_APP_ID=""PUSHER_KEY=""PUSHER_SECRET=""PUSHER_CLUSTER=""

更新已安装的应用程序

将drf_model_pusher添加到您的INSTALLED_APPS

INSTALLED_APPS=["...","drf_model_pusher",]

执行推进器后端

pusher_backends.py文件中为模型和序列化程序定义一些PusherBackends。pusherbackend类只需要定义一个继承自ModelSerializerserializer_class属性。

# example/pusher_backends.pyfromdjango.db.modelsimportModelfromrest_framework.serializersimportModelSerializerfromdrf_model_pusher.backendsimportPusherBackend,PrivatePusherBackendclassMyModel(Model):passclassMyModelSerializer(ModelSerializer):classMeta:model=MyModelclassMyModelPrivateSerializer(ModelSerializer):classMeta:model=MyModelclassMyModelPusherBackend(PusherBackend):serializer_class=MyModelSerializerclassMyModelPrivatePusherBackend(PrivatePusherBackend):serializer_class=MyModelPrivateSerializer

实施视图

将^ {A6} MIXIN类添加到视图中,并定义一个^ {< CD6>}方法,该方法应返回用作通道的字符串列表。

# example/views.pyfromrest_framework.viewsetsimportModelViewSetfromdrf_model_pusher.viewsimportModelPusherViewMixinfromexample.serializersimportMyModelSerializerclassMyModelViewSet(ModelPusherViewMixin,ModelViewSet):serializer_class=MyModelSerializerdefget_pusher_channels(self):return["<channel_id>"]

忽略当前连接

如果要在发送消息时忽略当前连接,则应在请求中设置一个x-pusher-socket-id头。如果您正在修改资源并在响应中接收结果,这可能很有用,您可能不希望当前连接侦听这些事件以防止复制内容。

pusherbackend.push_change方法接受一个ignore布尔关键字参数,该参数可以切换是否使用pusher socket id,它默认为True,因此在请求中包含pusher socket id将忽略默认发送的所有pusher事件的当前连接。

设置

  • DRF_MODEL_PUSHER_BACKENDS_FILE(默认值:pusher_backends.py)-应用程序中导入pusherbackend的文件。
  • DRF_MODEL_PUSHER_DISABLED(默认值:False)-确定是否触发pusher事件。

常见问题

未注册的后端

如果您正确地执行了上述步骤,并且后端没有注册,那么您的应用程序配置可能没有运行它的ready方法。要强制执行此操作,请在应用程序中添加行__init__.py

推进器

注意任何pusher限制,并查阅https://pusher.com/docs上的文档以了解一些常见问题。

Pusher has a 10kb default size limit on messages, this can be increased to 256kb by contacting support.

延伸PusherBackend

如果要扩展PusherBackendPrivatePusherBackend,而不是声明新的具体后端,则需要确保类是抽象的。例如,您的新基类将类似于此:

classMyPusherBackend(PusherBackend):classMeta:abstract=True# Override whatever methods hereclassMyModelBackend(MyPusherBackend):classMeta:model=MyModel

贡献

现在还很早,但是如果你想报告任何问题或改进工作,请在报告之前检查任何类似的问题。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法使用Intellij Idea执行Xpath   java为什么springbootstarterdatajpa 2.5.0不能因“未找到表”而初始化数据?   google maps Geoppoint类中的java丢失精度   java fb graph对象中有哪些属性可用?   实现JNI时指针类型的java错误   java使用管理目录API将一个组织单元移动到另一个组织单元?   java局部变量gcd可能尚未初始化   java示例代码未按预期执行   使用持久性的JPA的数据库连接位于何处。xml?   java从AJAX成功函数中检索ArrayList元素   java中的持久文件验证   java编码简约消息的最佳方式   tapestry用java生成站点地图并使其公开   Java文档中使用的哈希集约定   java试图在工作线程上调用join   java有没有时间函数来记录一个方法完成一项工作所需的时间?   如何让计算器在按下等号后接受新数字?JAVA