Python Flask 使用按钮调用函数

Posted

技术标签:

【中文标题】Python Flask 使用按钮调用函数【英文标题】:Python Flask calling functions using buttons 【发布时间】:2015-09-03 03:42:56 【问题描述】:

一旦我的烧瓶模板中的按钮被按下,我希望它调用 app.py 中定义的 python 函数,通过在下面定义函数的地方键入以下内容,我可以在模板中调用该函数:

app.py 中的示例函数:

@app.route('/foo')
def foo(x,y):
    pass
app.jinja_env.globals.update(foo=foo)

模板:

<button  type="button" onclick="myFunction(this)" name="enable" id="counter"> Enable </button>

在我的按钮中,我有 onclick 属性,只是为了测试使用 javascript 按下了正确的按钮:

% block scripts %
     super() 
    <script>
    function myFunction(elem)
        if(confirm('Are you sure you want to ' + elem.name) == true)
            alert("its done.");            
         
         else  
            return false;
                   
    
    </script>
% endblock %

我面临的问题是我需要在模板中提供的功能与正确的按钮相对应。例如,如果按钮显示启用,那么我需要调用已经定义的启用功能,否则如果按钮对应于 false,我希望使用禁用功能。

我觉得我正朝着正确的方向前进,但无法超越这一部分。请尽可能详细。

【问题讨论】:

【参考方案1】:

如果你想在不向服务器产生请求的情况下执行你的函数,那么你的函数必须在 JavaScript 中定义。否则,您需要触发 HTTP 请求。

现在,在您的情况下,如果您想要做的只是启用/禁用按钮,那么在 javascript 中执行所有这些操作是有意义的(无需访问服务器)。

例子:

<button type="button" onclick="disableButton(this)" name="enable">Enable</button>

javascript

function disableButtonState(elem) 
    if(confirm('Are you sure you want to disable this button?') == true) 
        elem.disabled = true;
        alert("its done.");            
    
    else  
        return false;
              

</script>

但是,如果您想要调用服务器上的方法,例如发送电子邮件,那么您应该使用form POST/GET 或AJAX POST/GET

例子:

app.py

@app.route('/foo', methods=['GET', 'POST'])
def foo(x=None, y=None):
    # do something to send email
    pass

模板

<form action="/foo" method="post">
    <button type="submit" value="Send Email" />
</form>

当您单击“发送电子邮件”按钮时,一个 HTTP POST 请求将发送到您应用程序上的“/foo”。您的函数foo 现在可以从请求中提取一些数据,并在服务器端执行它想做的任何事情,然后向客户端 Web 浏览器返回响应。

当涉及到使用 Flask 构建的 Web 应用程序时,建议通过 Flask Tutorial 更好地了解客户端/服务器交互。

【讨论】:

感谢您的回复。所以从你告诉我的情况来看,我只需要针对我的具体情况使用 JavaScript。我面临的最大问题是试图在 JS 中调用实际的 python 函数。你能指出我正确的方向或举个例子吗? 您不能直接从 JavaScript 调用 python 函数,因为在这种情况下,您的 JavaScript 正在客户端的浏览器上运行,而您的 Python 函数存在于服务器上。实现这种通信的唯一方法是将 HTTP 请求发送到您的服务器。这就是我的回答所暗示的。如果您尝试做的是纯粹的视觉操作,例如禁用或隐藏按钮,那么这可以完全在 JavaScript 中实现。这是你的意图吗? 查看我的编辑以使用 javascript 操作按钮,如果这是你想要做的事情 啊,我明白了。我不想只是更改服务器页面上的文本,而后端没有实际发生任何事情。我已经完全完成了我需要在服务器端禁用的功能。所以我确实需要一个 HTTP 请求来执行此操作。我明天会搜索一下。感谢您的指导。

以上是关于Python Flask 使用按钮调用函数的主要内容,如果未能解决你的问题,请参考以下文章

从烧瓶应用程序调用 python 函数

如何将两个参数传递给由 ajax 函数调用的 python 函数?

使用 Jquery $.ajax 在 Flask 上调用服务器端函数 [重复]

Asyncio 函数在从脚本调用而不是从 Flask 路由调用时有效

Flask:单击按钮下载csv文件[重复]

vue按钮调用python函数