前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Django中使用MQTT的方法

在Django中使用MQTT的方法

作者头像
obaby
发布2023-02-22 14:49:35
1K0
发布2023-02-22 14:49:35
举报
文章被收录于专栏:obaby@mars

文章代码源于这里:https://www.zhuxianfei.com/python/47350.html。

就想偷懒而已,于是直接超了代码。结果运行直接bug了:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/Users/zhongming/PycharmProjects/django-vue-admin/backend/application/baby_mqtt.py", line 11, in <module>
    django.setup()
  File "/Users/zhongming/PycharmProjects/django-vue-admin/backend/venv/lib/python3.8/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/Users/zhongming/PycharmProjects/django-vue-admin/backend/venv/lib/python3.8/site-packages/django/conf/__init__.py", line 82, in __getattr__
    self._setup(name)
  File "/Users/zhongming/PycharmProjects/django-vue-admin/backend/venv/lib/python3.8/site-packages/django/conf/__init__.py", line 63, in _setup
    raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: Requested setting LOGGING_CONFIG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

这个错误提示就很高端,往上搜了一遍又一遍发现都是下面一样的代码:

代码语言:javascript
复制
# 为了能在外部脚本中调用Django ORM模型,必须配置脚本环境变量,将脚本注册到Django的环境变量中
import os, sys
import django
# 第一个参数固定,第二个参数是工程名称.settings
os.environ.setdefault('DJANGO_SETTING_MODULE', 'my_django.settings')
django.setup()
 
# 引入mqtt包
import paho.mqtt.client as mqtt
# 使用独立线程运行
from threading import Thread
from app名 import models
import time
import json
 
# 建立mqtt连接
def on_connect(client, userdata, flag, rc):
    print("Connect with the result code " + str(rc))
    client.subscribe('test/#', qos=2)
 
# 接收、处理mqtt消息
def on_message(client, userdata, msg):
    out = str(msg.payload.decode('utf-8'))
    print(msg.topic)
    print(out)
    out = json.loads(out)
 
    # 收到消息后执行任务
    if msg.topic == 'test/newdata':
        print(out)
 
# mqtt客户端启动函数
def mqttfunction():
    global client
    # 使用loop_start 可以避免阻塞Django进程,使用loop_forever()可能会阻塞系统进程
    # client.loop_start()
    # client.loop_forever() 有掉线重连功能
    client.loop_forever(retry_first_connection=True)
 
client = mqtt.Client(client_id="test", clean_session=False)
 
# 启动函数
def mqtt_run():
    client.on_connect = on_connect
    client.on_message = on_message
    # 绑定 MQTT <a href="http://www.zhuxianfei.com/server/" target="_blank" class="infotextkey">服务器</a>地址
    broker = '192.168.1.88'
    # MQTT服务器的端口号
    client.connect(broker, 1883, 62)
    client.username_pw_set('user', 'user')
    client.reconnect_delay_set(min_delay=1, max_delay=2000)
    # 启动
    mqttthread = Thread(target=mqttfunction)
    mqttthread.start()
 
# 启动 MQTT
# mqtt_run()
 
if __name__ == "__main__":
    mqtt_run()

一个字母都不带改的,当然这些抄文章的人肯定自己没试过。因为上面的代码就跑不动,那一行有问题呢?当然就是下面这一行了:

代码语言:javascript
复制
os.environ.setdefault('DJANGO_SETTING_MODULE', 'my_django.settings')

上面的代码应该是:

代码语言:javascript
复制
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'application.settings')

对比一下发现区别了吗?少了个S对不对?这个陷阱真的是太牛逼了,不是语法问题,所以运行的之后不会报语法错误,直接报的django的错误。想排查都不好排查。直到所又从google的代码抄了一份,发现长度不一致,才发现少了个S。不知道是不是作者有意为之,这就很高端。其他的就没什么问题了,加上S就可以正常运行了。

☆文章版权声明☆

* 网站名称:obaby@mars * 网址:https://h4ck.org.cn/ * 本文标题: 《在Django中使用MQTT的方法》 * 本文链接:https://h4ck.org.cn/2022/11/%e5%9c%a8django%e4%b8%ad%e4%bd%bf%e7%94%a8mqtt%e7%9a%84%e6%96%b9%e6%b3%95/ * 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


分享文章:

相关文章:

  1. 由apscheduler引发的django.db.utils.InternalError: (1054, u”Unknown column ‘rms.go_datetime’ in ‘field list'”)
  2. Django 限制访问频率
  3. 关于若依Python(Django-Vue-Admin)的一些设置
  4. Django 代码保护
  5. django使用多个数据库
  6. django raw_id_fields 显示名称而不是id(raw_id_fields: How to show a name instead of id)
  7. Python3 requests 下载进度条
  8. M1 Mac 安装Tensorflow
  9. 性感美女爬虫 Windows【22.01.11】
  10. can’t open file ‘< unprintable file name>’: [Errno 2] No such file or directory
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年11月9日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 相关文章:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档