Hi!! I need a basic example of a program with channels 2.x (Django 2.x) 
that when it fulfills a condition, it calls a task celery 4.x and updates 
its status in a message in the html. (for 
example https://vincenttide.com/blog/1/django-channels-and-celery-example/)

But i have the following error in consumer.py in "def mensaje": *raise 
ValueError("No handler for message type %s" % message["type"]):*


Mi code in *consumers.py*:


from channels.generic.websocket import AsyncJsonWebsocketConsumerfrom .tasks 
import PruebaCeleryclass Consumer(AsyncJsonWebsocketConsumer):
    async def connect(self):
        print(self.channel_name)
        await self.accept()
        print("[BACK]:Cliente conectado")

    async def disconnect(self, close_code):
        return None

    async def receive_json(self, contenido):

        try:
            if True:
                print("[BACK]:Datos recividos",contenido)
                await self.mensaje(contenido)
        except:
            pass

    async def mensaje(self, contenido):
        print("[BACK]:Si se cumple la condicion se envia mensaje")
        print(contenido["Clave_Tipo_Filtro"])
        TipoFiltro = contenido["Clave_Tipo_Filtro"]
        if TipoFiltro == "Filtro_Paso_Bajo":
            print("dentro")
            mensaje = PruebaCelery.delay(self.channel_name)
            print("Here")
            print ("hola %s" %str(mensaje["text"]))
            print("Out")
            print ("Task ID: %s" %mensaje)
            await self.send("Task ID: %s" %str(mensaje))
            await self.send("se ha ejecutado celery")
        else:
            print("no entra")

        return None

Mi code in *tasks.py*:

#De celery
from Filtros.celery import app
import json
from channels.layers import get_channel_layer
from asgiref.sync import AsyncToSync


@app.task
def PruebaCelery(channel_name):
    # responder al cliente
    channel_layer = get_channel_layer()
    AsyncToSync(channel_layer.send)(
                channel_name,
                {"type": "Test",
                 "text": json.dumps("Hi im celery"),
                 })


Mi code in *html*: *how could I print "hi im celery" in the html?*


































*<script type="text/javascript">//Envio de la conexion del front al 
back.function onOpen(evt) {    console.log("[FRONT]:El websocket ha sido 
conectado");    websocket.send(JSON.stringify({data: "[FRONT]:El websocket 
esta conectado...ahora estas conectado con el front"}));}//Recepcion datos 
del back al frontfunction onMessage(evt) {    console.log("[FRONT]:Mensaje 
recibido del back al front:" + evt.data);}//Conexion del websocketfunction 
setupWebSocket() {    prefix = "ws";    websocket = new WebSocket(prefix + 
"://"  + location.host + "/Crear_FPB/");    websocket.onopen = 
function(evt) { onOpen(evt); };    websocket.onmessage = function(evt) { 
onMessage(evt); };}//Envio de los datos del formulario del front al 
back.function runButton() {    var variables_FPBajo = {        
Clave_Tipo_Filtro: "Filtro_Paso_Bajo",        Clave_Ap_db: 
$("#Valor_Ap_db").val(),           Clave_Medida_Ap_db: 
$("#Medida_Ap_db").val(),        Clave_As_db: $("#Valor_As_db").val(),      
  Clave_Fp_Hz: $("#Valor_Fp_Hz").val()    };    
websocket.send(JSON.stringify(variables_FPBajo));}window.addEventListener("load",
 
setupWebSocket);*

Mi code in *routing.py*:



from django.urls import path

#from channels.http import AsgiHandler
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack

from F_Paso_Bajo.consumers import Consumer

application = ProtocolTypeRouter({

    # Channels will do this for you automatically. It's included here as an 
example.
    # "http": AsgiHandler,

    # Route all WebSocket requests to our custom chat handler.
    # We actually don't need the URLRouter here, but we've put it in for
    # illustration. Also note the inclusion of the AuthMiddlewareStack to
    # add users and sessions - see 
http://channels.readthedocs.io/en/latest/topics/authentication.html
    "websocket": AuthMiddlewareStack(
        URLRouter([
            # URLRouter just takes standard Django path() or url() entries.
            # URL del javascript
            path("Crear_FPB/", Consumer),
        ]),
    ),

})




-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/e9f5278c-3386-4c45-ae00-be753e6745f2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to