我的目标是将我在 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))
当我将导入放入函数中时,它根本不起作用
您需要先设置 django 应用程序,然后才能导入它们。
在导入之前添加此:
import django
django.setup()
from print.views import *
您可以将启动命令添加到
__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()