【问题标题】:Django Channels Not workingDjango 频道不工作
【发布时间】: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


【解决方案1】:

你需要安装 asgiref 版本

【讨论】:

猜你喜欢
  • 2021-08-21
  • 1970-01-01
  • 2016-12-08
  • 2016-10-18
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 2017-10-12
相关资源
最近更新 更多