django 按钮单击无法重定向到目标URL

xbp102n0  于 2023-05-30  发布在  Go
关注(0)|答案(1)|浏览(203)

我试图点击一个按钮,应该会导致我在我的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')
   
]

谢谢

ldfqzlk8

ldfqzlk81#

首先解释一下为什么你所拥有的东西不起作用。
1.正如在注解中提到的,client.loop_forever()就是这样做的,所以永远不会返回
1.您正在泄漏MQTT客户端,每次它调用的代码都会创建一个新的客户端
1.您有一个固定的客户端ID,因此客户端每次尝试连接时都会将对方踢出代理,客户端越多(参见第2点),情况就越糟。
1.如果永远没有响应会发生什么(例如处理第一条消息的客户机停机)
1.如果多个人同时打开页面,那么按下按钮的不同客户端之间可能会出现竞争条件。
我建议你根本不要尝试让django后端参与进来,用一个页面内的JavaScript MQTT客户端替换HTTP请求,它可以发送消息并侦听响应,并在需要时使用该响应触发页面导航。这比试图将HTTP Package 成MQTT请求/响应模式要简单得多。
您将需要一个支持并已配置为MQTT over WebSockets的代理。

相关问题