【问题标题】:HTML button to run Python function运行 Python 函数的 HTML 按钮
【发布时间】:2014-05-14 13:48:33
【问题描述】:

我有脚本,在CGIHTTPServer 下运行。

脚本包含:

$ cat cgi-bin/mysql.py
#!/usr/bin/env python

print "Content-Type: text/html"
print
print """
<html>
<body>
<h2>Test</h2>
<button type="button">Get version</button>
</body>
</html>
"""

和函数(在其他脚本或这个):

def myver(host, user, pwd, cmd):
    db = MySQLdb.connect(host, user, pwd)
    cursor = db.cursor()
    cursor.execute(cmd)
    data = cursor.fetchone()
    print "Database version : %s " % data
    db.close()

myver('localhost', 'username', 'megapass', 'SELECT VERSION()')

我怎样才能将这个函数的结果放到同一个网页上?

HowTo 的链接将是完美的。或者一些例子。

【问题讨论】:

    标签: python html cgi


    【解决方案1】:

    我认为使用 jquery 和 Flask 可以做得更好。

    Flask 是一个非常易于使用的 Python 微框架,jQuery 是一个让 Ajax 变得轻而易举的 JavaScript 库。

    一些代码

    from flask import Flask, request
    
    app = Flask(__name__)
    
    @app.route('/')
    def main():
        return """<html>
                       <head>
                          <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
                          <script>
                               $(document).ready(function(){
    
                                    $('#btnSend').click(function(){
    
                                        $.ajax({
                                          type: 'POST',
                                          url: '/process',
                                          success: function(data){
                                            alert(data);
                                          }
                                        });
                                    });
    
                               });
                          </script>
                       </head>
                       <body>
                        <input type="button" id="btnSend" value="process">
                        </body>
                       </html>"""
    
    
    @app.route('/process', methods=['POST'])
    def view_do_something():
    
        if request.method == 'POST':
            #your database process here
            return "OK"
        else:
            return "NO OK"
    
    if __name__ == '__main__':
        app.run()
    

    在浏览器中尝试 http:// localhost : 5000。

    【讨论】:

    • 谢谢,但这对我来说太复杂了:-)
    • 如果您想做比您在问题中发布的单页应用程序更复杂的事情,Flask 和 jQuery 将让您的生活比尝试通过 CGI 方式苦苦挣扎一百万倍。跨度>
    • 不客气,但请听@robbrit 的建议。 Jquery 和 Flask(或任何其他 Python Web 框架)这是要走的路。
    【解决方案2】:

    您可以通过组合两个 sn-ps 来做到这一点:

    #!/usr/bin/env python
    
    
    def myver(host, user, pwd, cmd):
        db = MySQLdb.connect(host, user, pwd)
        cursor = db.cursor()
        cursor.execute(cmd)
        data = cursor.fetchone()
        print "Database version : %s " % data
        db.close()
    
    print "Content-Type: text/html"
    print
    print """
    <html>
    <body>
    <h2>Test</h2>
    """
    
    myver('localhost', 'username', 'megapass', 'SELECT VERSION()')
    
    print """
    </body>
    </html>
    """
    

    如果您想通过单击按钮执行此操作,则需要研究 AJAX 和比 CGI 更灵活的东西,例如 Flask

    【讨论】:

      【解决方案3】:

      找到下一个解决方案 - 使用 GET:

      $ cat cgi-bin/mysql.py
      #!/usr/bin/python
      
      import cgi, MySQLdb
      
      data = None
      form = cgi.FieldStorage()
      
      def myver(host, user, pwd, cmd):
          db = MySQLdb.connect(host, user, pwd)
          cursor = db.cursor()
          cursor.execute(cmd)
          global data
          data = cursor.fetchone()
          db.close()
      
      form = cgi.FieldStorage()
      
      print "Content-type:text/html\r\n\r\n"
      print "<title>Test to get MySQL version</title>"
      print "<h2>MySQL version</h2>"
      print '''Get version: <form action="/cgi-bin/mysql.py" method="get">
      <input type="submit" name="getvers" value="Get version" />
      <input type="submit" name="exit" value="Exit" />
      </form>
      '''
      
      if "getvers" in form:
          myver('localhost', 'username', 'megapass', 'SELECT VERSION()')
          print 'Current MySQL version: ' + ''.join(data)
      elif "exit" in form:
          print 'Exit'
      

      如果有任何问题,请纠正我......但是 - 它有效。

      附:无法使用POST 方法运行它:-(

      【讨论】:

        猜你喜欢
        • 2015-08-10
        • 1970-01-01
        • 2021-10-16
        • 2013-04-04
        • 1970-01-01
        • 2015-01-03
        • 1970-01-01
        • 2013-02-16
        • 1970-01-01
        相关资源
        最近更新 更多