我试图点击一个按钮,应该会导致我在我的URL中的一个特定的页面,但它不按预期运行。
mainpage.html:
<form method="POST">
<input type="button" name="Show Result" onclick="location.href='{% url 'get_result' %}'"
value="Show Result"></input>
</form>
我的页面在视图中:
def get_result(request):
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("a",)
result = None
def on_message(client, userdata, msg):
global result
result = msg.payload.decode("utf-8")
print("Received message:", result)
client = mqtt.Client("p1")
client.connect("127.0.0.1", 1883)
client.publish("test", 'C:/Users/HP/Desktop/reallifeviolencesituation/NV_4.mp4')
client.on_connect = on_connect
client.on_message = on_message
client.loop_forever()
context = {'result': result}
return render(request, "result.html", context)
我的网址:
urlpatterns = [
path('admin/', admin.site.urls),
path('', showvideo, name='showvideo'),
path('get_result/', get_result, name='get_result')
]
谢谢
1条答案
按热度按时间ldfqzlk81#
首先解释一下为什么你所拥有的东西不起作用。
1.正如在注解中提到的,
client.loop_forever()
就是这样做的,所以永远不会返回1.您正在泄漏MQTT客户端,每次它调用的代码都会创建一个新的客户端
1.您有一个固定的客户端ID,因此客户端每次尝试连接时都会将对方踢出代理,客户端越多(参见第2点),情况就越糟。
1.如果永远没有响应会发生什么(例如处理第一条消息的客户机停机)
1.如果多个人同时打开页面,那么按下按钮的不同客户端之间可能会出现竞争条件。
我建议你根本不要尝试让django后端参与进来,用一个页面内的JavaScript MQTT客户端替换HTTP请求,它可以发送消息并侦听响应,并在需要时使用该响应触发页面导航。这比试图将HTTP Package 成MQTT请求/响应模式要简单得多。
您将需要一个支持并已配置为MQTT over WebSockets的代理。