将我在 Mqtt 上收到的不同类型消息的数据保存到 Django 模型

问题描述 投票:0回答:2

我的目标是将我在 MQTT 上收到的不同类型消息的数据保存到我的 Django 模型中。为此,我假设我需要导入要保存的模型。但是当我这样做时,我得到“Django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。”

我的 MQTT 连接设置:mqtt.py

import paho.mqtt.client as mqtt
from print.views import *

def on_connect(client, userdata, rc, properties=None):
    client.subscribe("foo/printers/#")
    print("Connection returned result: " + mqtt.connack_string(rc))


def on_message(client, userdata, msg):
    handle_msg(msg.topic, msg.payload)

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.username_pw_set(username="foo",password="bar")


client.connect("mqtt.foo.de", 1883, 60)

我的

__init__.py

from . import mqtt
mqtt.client.loop_start()

我的消息处理程序视图:


from models import Machine
def handle_msg(topic, message):
    
    printer = topic.split("/")[2]
    print(Machine.objects.get(Name=printer))

当我将导入放入函数中时,它根本不起作用

python django mqtt paho
2个回答
0
投票

您需要先设置 django 应用程序,然后才能导入它们。

在导入之前添加此:

import django
django.setup()

from print.views import *

0
投票

您可以将启动命令添加到

__init__.py
文件,而不是添加到
apps.py
。然后,当应用程序准备就绪时,它将启动 MQTT。

apps.py 文件:

from django.apps import AppConfig
    
class V1Config(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'v1'
    def ready(self):
        
        from .mqtt import client
        client.loop_start()
© www.soinside.com 2019 - 2024. All rights reserved.