运行python脚本的空白页

时间:2018-01-12 11:36:35

标签: python html

我有一个HTML页面,我将一些输入值传递给python脚本进行处理。我想要做的是显示计算结果。就在白页上。没有格式或任何东西。只是简单的数字。

问题是我只是一个空白页面,我无法弄清楚原因。

我做了很多研究,但没有一个解决方案适用于我的问题。

似乎正在传递和处理这些值,因为我没有收到错误消息,错误日志中也没有错误,也没有Web控制台中的任何指示。

我正在运行一个带有apache2的LAMP网络服务器。 apache2已正确配置为运行python和cgi。

HTML:

<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8">
      <title>Eval Main</title>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
   </head>
   <body>
      <script type="text/javascript">
         $(function()
         {
             $('#ok').click(function()
             {
                 $.ajax(
                 {
                     url: "/cgi-bin/verlauf_Grenzen.py",
                     data:
                     {
                         a_test: $("#testa").val(),
                         v_test: $("#testv").val(),
                         s_test: $("#tests").val(),
                         j_test: $("#testj").val()
                     },
                     success: function(response)
                     {
                         handleResponse(response);
                     }
                 });
             });
         });
      </script>
      <form action="/cgi-bin/verlauf_Grenzen.py" method="POST">
         <input id="testa" type="number" name="a" />
         <input id="testv" type="number" name="v" />
         <input id="tests" type="number" name="s" />
         <input id="testj" type="number" name="j" />
         <button id="ok" type="submit" value="Submit">Click</button>
      </form>
   </body>
</html>

verlauf_Grenzen.py

    #!/usr/local/bin/python3.6

    import json, time, glob, os
    import numpy as np
    from ruck import Cases
    import cgi, cgitb

    cgitb.enable()

    print("Content-type:text/html\n")

    def index(req):
        form = cgi.FieldStorage()

        a = form.getvalue('a_test')
        v = form.getvalue('v_test')
        s = form.getvalue('s_test')
        j = form.getvalue('j_test')

        cases = Cases(a,v,s,j)

        #does something here

        return x #x ist a single number

        print("<html>")
        print("<head>")
        print("<title>CALC</title>")
        print("</head>")
        print("<body>")
        print("<h2>Your name is {} </h2>".format(x))
        print("</body>")
        print("</html>")
        req.write(x)

ruck.py

        #!/usr/local/bin/python3.6

        import cgi, cgitb

        cgitb.enable()

        class Cases(object):

            def __init__(self, a, v, s, j):
                self.a = a
                self.v = v
                self.s = s
                self.j = j

           # does something here (a few functions/methods)

                return x, tj, ta, tv, tg, self.v, self.a

            def __call__(self):
                self.case_one()
                self.case_two()
                self.case_three()
                self.case_four()

两个脚本都可以正常运行并且不会出错。 在此先感谢您的帮助。我是网络编程的新手。

2 个答案:

答案 0 :(得分:1)

这里有一些问题,包括JS和Python。

首先,在JS方面,您的事件处理程序不会阻止表单的默认提交 - 您应该使用event.preventDefault()。其次,您似乎没有定义在Ajax成功方法中调用的handleResponse()函数。

在Python方面,您的verlauf_Grenzen文件定义了index函数,但似乎没有调用它。在该函数内部,有一个return x语句中途无条件返回,因此打印响应的后续代码都不会被执行。

最后,如果你做的不仅仅是非平凡的工作,你应该考虑使用适当的Python微框架,比如Flask,而不是使用CGI。

答案 1 :(得分:0)

我是如何解决的:

的Python:

import json, time, glob, os
import numpy as np
from ruck import Cases
import cgi

form = cgi.FieldStorage()

a = form.getvalue('a_test')
v = form.getvalue('v_test')
s = form.getvalue('s_test')
j = form.getvalue('j_test')

cases = Cases(a,v,s,j)

# does something here (a few functions/methods)

json.dumps(somedata)

我的HTML中的ajax:

<script>
$(function(){
$('#btn2').click(function(){
   $.ajax({
      url: 'https://192.168.80.27/cgi-bin/verlauf_Grenzen.py',
      type: 'post',
      data: $.('.senddata').serialize(),
      success: function(data) {
        window.alert("Data sent!");
         },
     });
   });
});
</script>
<input id="btn2" class="button" type="button" value="Send Values"  value="Click"/>

<script>       
$(function(){
$('#btn').click(function(){
   $.ajax({
      url: 'https://192.168.80.27/cgi-bin/verlauf_Grenzen.py',
      type: 'json',
      data: {},
      success: function(data) {
            var jsondata = JSON.stringify(data);
            $('#xbtn').html(jsondata);
        window.alert("Success!!!");
         },
     });
  });
});
</script>
<input id="btn" class="button" type="button" value="Load results" value="Click"/>
<span id="xbtn"></span>