【发布时间】:2017-07-07 07:47:39
【问题描述】:
我一直在关注 Django 频道教程,但我不知道为什么我的应用程序无法运行。每当我通过 django ORM 更改数据库时,我的浏览器都没有得到任何更新。
路由.py
from channels import route_class
from values.consumers import Secondmultiplexer
channel_routing = [
route_class(Secondmultiplexer, path='^/stream2/?$')
]
models.py
from django.db import models
from channels.binding.websockets import WebsocketBinding
class SimpleStock(models.Model):
ticker = models.CharField(max_length=30, primary_key=True)
current_price = models.FloatField(default=0)
class SimpleStockBinding(WebsocketBinding):
model = SimpleStock
stream = "stocks"
fields = ["ticker", "current_price"]
@classmethod
def group_names(cls, instance):
return ["stocks-updates"]
def has_permission(self, user, action, pk):
return True
consumers.py
from channels.generic.websockets import WebsocketDemultiplexer
from .models import SimpleStockBinding
class Secondmultiplexer(WebsocketDemultiplexer):
consumers = {
"stocks": SimpleStockBinding.consumer,
}
groups = ["binding.values"]
index.html
{% extends "base.html" %}
{% block title %}Databinding Example{% endblock %}
{% block header_text %}Databinding Example{% endblock %}
{% block content %}
{% endblock %}
{% block extra_body %}
<script>
$(function () {
var second_path = "/stream2/";
console.log("Connecting to " + second_path);
var secondWebSocketBridge = new channels.WebSocketBridge();
secondWebSocketBridge.connect(second_path);
secondWebSocketBridge.listen();
secondWebSocketBridge.demultiplex('stocks',function(payload, streamName) {
console.log(payload);
});
});
</script>
{% endblock %}
asgi.py
import os
from channels.asgi import get_channel_layer
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "databinding.settings")
channel_layer = get_channel_layer()
【问题讨论】:
-
您遇到什么错误?您的
asgi文件配置正确吗? -
可以这么说,我没有收到错误,插入新库存后,我没有从解复用器中获取控制台日志
-
我建议使用通道 2,因为通道 1 不再维护。在 Chrome 开发者工具中,您可以查看原始 websocket 连接。这样您就可以查看您是否正在获取数据并且问题出在您的前端代码上。
-
你能解决这个问题吗?
标签: python django python-2.7 django-channels