如何从jquery pos执行python函数

2024-06-01 05:19:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在单击图像(按钮)时调用一个python函数,这将允许我从web界面控制伺服。

以下是jQuery代码的一部分:

$('#left_button').click(function(){
            $.post("cameraservo2.py", {direction:"left"}).done(function (reply) {
                $('#camerapos').empty().append(reply);
                alert("left button clicked");});

        });

这是我的Python代码:

#!/usr/bin/python

def index (self, **data):

    import pigpio
    import time

    servos=4
    key = data['direction']

    m=1500
    while (m >= 500 and m <= 2500):
        if (key =="left"):
            m=m+100
        elif (key =="right"):
            m=m-100

    pigpio.start()

    pigpio.set_servo_pulsewidth(servos, m) 
    servostatus= "Servo {} {} micro pulses".format(servos[0], key, m)
    print servostatus
    time.sleep(1)

    pigpio.stop()

    return servostatus

我的问题是,当点击按钮时,它会提示“左键被点击”,这意味着它已经运行了python文件。但是,我没有显示“servostatus”,而是将整个python代码显示在我的#cameraposdiv中

如果我需要发布更多信息,请告诉我。谢谢!!


Tags: key代码图像importdatatimefunctionbutton
2条回答

为了从客户端查询调用服务器端python代码,您需要一些额外的工具。Flask,一个轻量级的python web框架通常是解决此类问题的首选工具。

烧瓶文件:http://flask.pocoo.org

带JQuery的烧瓶:http://flask.pocoo.org/docs/patterns/jquery/

带Jquery POST的烧瓶:how can I use data posted from ajax in flask?

要在Flask/Jquery中使用POST,必须在python中注释接收方法。你的代码看起来像这样。

@app.route('/servo_pos', method=["POST"])
def servo_pos():
    do_your_work_here
    return jsonify({"servo_pos", ret_val})

您还需要稍微调整jquery。

$('#left_button').click(function(){
            $.post("/servo_post", {direction:"left"}).done(function (reply) {
                $('#camerapos').empty().append(reply);
                alert("left button clicked");});

        });

我不确定这一步,但您可能还需要用.ajax替换.post。由于不希望在显示新内容之前重新加载页面,因此这不是传统的post请求,而是ajax请求。

或者,是否有理由必须使用post请求,而GET_JSON不会像上面的jquery ajax模式那样工作?

关键注意事项:

  1. 添加“methods=['POST']
  2. 数据请求参数位于data.request.data
  3. 返回“jsonified”字典中的数据需要from Flask import jsonfiy

除了运行完整的服务器端python web框架之外, 最简单的方法是使用cgi,例如uwsgi

有关最小工作设置的更多信息,请参见官方的python docs

互动性

如果您的webapp需要与服务器进行更多的交互,那么您可能需要考虑使用websockets而不是AJAX作为通信框架。 警告: 旧浏览器不支持WebSocket。

一个well developed framework that has websocket support is tornado的例子。

相关问题 更多 >