django通道的简单单向绑定,并对django rest框架序列化器和websockets提供特定支持。也就是说,使用推送通知丰富现有的api。
drf-channels-oneway-ws的Python项目详细描述
DRF信道单向WS
django通道的简单单向绑定,并对django rest框架序列化器和websockets提供特定支持。即用推送通知丰富现有API。
安装
pipenv install drf-channels-oneway-ws
或pip install drf-channels-oneway-ws
用法
绑定
fromdjango.dbimportmodelsfromrest_frameworkimportserializersfromchannels_oneway.bindingsimportBindingclassFamily(models.Model):name=models.CharField(max_length=255)classBird(models.Model):name=models.CharField(max_length=255)family=models.ForeignKey('Family',models.CASCADE)classBirdSerializer(serializers.ModelSerializer):classMeta:model=Customerfields=('__all__')classBirdBinding(Binding):model=Birdstream='birds'serializer=BirdSerializer@classmethoddefgroup_names(cls,instance):return[instance.family.name]classFamilyBinding(Binding):""" example of a binding not using a drf serializer """model=Familystream='bird-families'@classmethoddefgroup_names(cls,instance):return[instance.name]defserialize_data(self,instance):return{'id':instance.id,'name':instance.name}
现在您要确保有一个websocketconsumer,它在其connect coroutine中执行类似于self.channel_layer.group_add('thrushes', self.channel_name)
的操作。
Family.objects.create(name='thrushes')
然后将通过关联的websocket发送以下内容:
{"stream":"bird-families","payload":{"action":"create","data":{"id":1,"name":"thrushes"},"model":"your_app.family","pk":1}}
修改("action": "update"
)或删除("action": "delete"
)后,您将收到具有相同结构的消息。
注册
为了让绑定注册它们的信号,请确保在某个时刻导入它们。如果使用专用文件,请像从信号一样从^{
助手
为了从绑定外部发送ws消息,但使用相同的格式(流+有效负载)(以及drf json编码器),请使用a syncchannels_oneway.utils.groupSend(group, stream, payload)
或其同步等价物groupSendSync
。
贡献
安装
git clone git@github.com:evocount/drf-channels-oneway-ws.git
cd drf-channels-oneway-ws
pipenv install --dev
运行测试
pipenv run pytest --cov
许可证
这个项目是根据MIT License授权的。