Django Channel Web套接字 - 将消息附加到Model.objects

时间:2016-07-15 17:24:47

标签: django django-models websocket django-channels

最近,我一直在调查将网络套接字集成到Django中。根据文档,使用Channels是可行的方法。

给出说明性模型查询

class Request(models.Model):
    id = models.IntegerField(name="id", primary_key=True)
    query = models.CharField(name = 'query', max_length=1024)

我希望将我的Web应用程序连接到Web套接字服务器。当Web套接字服务器收到消息时,它应该将该消息广播到客户端建立的特定套接字连接子集。

客户端(即网络浏览器)一旦收到广播的消息,就应该将其附加到 Request.objects 。从那里开始,所有查询的列表应该使用Django模板自动更新,并在其中自动更新定义的模型 - 而不强迫用户显式刷新它。

因此,我的问题是:(I)使用Channels(如果这是在Django中处理Web套接字连接的首选方式),我如何将新到的 Query 对象附加到< em> Query.objects - 没有将对象存储到数据库中,因为它已经在发送到Web套接字服务器之前插入,(II)刷新相应Django模板的内容。

1 个答案:

答案 0 :(得分:0)

Django-Channels是将Django后端连接到Django前端的新方法。

您的第二个问题我并不完全理解,但在消费者功能中,您可以导入模型并更新数据库

# consumers.py 
def hello(message):
    obj = Request.objects..
    obj.save()
    message.reply_channel.send({
        "text": message.content['text'],
    })

最后,您可以使用jquery ...

更新模板
<p></p>
socket.onmessage = function(e) {
    $('p').html(e.data);
}