5

我正在尝试使用 PythonAnywhere.com 的 web.py 平台制作一个简单的 Web 脚本。我的目的是创建一个简单的表单,它可以获取文本框的数据并能够像我们使用 PHP 一样使用它们。这是我的主要脚本:

import web
from web import form
import MySQLdb

render = web.template.render('/home/user/templates/')

conn = MySQLdb.connect("mysql.server","user","*********","userdb")
curs = conn.cursor()

curs.execute('''create table if not exists Dados (
id int not null auto_increment primary key,
nome varchar(200),
item1 varchar(50),
item2 varchar(50),
item3 varchar(50),
item4 varchar(50),
item5 varchar(50));
''')

urls = (
  '/', 'index'
)

formula = form.Form(
    form.Textbox('Nome', id='nome'),
    form.Textbox('Item 1', id='it1'),
    form.Textbox('Item 2', id='it2'),
    form.Textbox('Item 3', id='it3'),
    form.Textbox('Item 4', id='it4'),
    form.Textbox('Item 5', id='it5'),
    )


class index:
    def GET(self):
        form = formula()        
        return render.formtest(form)

    def POST(self):
        form = formula()        
        return render.finaliza(form['Nome'].value)

# comment out these two lines if you want to use another framework
app = web.application(urls, globals())
application = app.wsgifunc()

然后我有两个 HTML 模板,这个模板存储表单:

$def with (form)

<form name="main" method="post"> 
$:form.render()
<input type="submit" name="send" id="envia" value="Ok" />    </form>

这应该在 POST 之后给出结果:

$def with (nome)

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
Congratulations $:nome !
</body>
</html>

一切正常,直到按下确定按钮。它显示了正确的模板,但不显示 $nome 变量。您可以在此链接上检查此行为:http: //jonathan_hepp.pythonanywhere.com/

我从 web.py 和 PythonAnywhere 开始,所以一定是我做错了什么,但我找不到。你能帮帮我吗?谢谢。

编辑:

我现在才发现,如果我将文本框值作为字符串传递,结果会有所不同。结果页面显示“恭喜没有!” 这让我认为实际上 POST 没有收到我在文本框中输入的值。所以代码似乎没问题,但不知何故我没有做对,所以它无法达到表单输入中的值。还是行不通。

解决了:

行。我意识到该form.Form()选项并没有真正创建和 html 表单输出。实际上,当您查看 formtest 页面的源代码时,您会发现我认为的表单显示为简单的 . 所以我只是直接在html中将表单制作成formtest模板,现在它工作得很好。只是一个愚蠢的错误,但如果其他人犯了这个错误,也照样做。谢谢你们。

4

2 回答 2

3

看起来 finaliza 模板中的变量实际上应该是“Nome”。所以:

Congratulations $:Nome ! 

可能会奏效。请记住在进行更改后在 PythonAnywhere 的 Web 选项卡上重新启动您的 Web 应用程序,否则您将看不到它们。

于 2012-01-30T17:16:30.460 回答
0

我正在使用相同的 web.py 框架。当我尝试通过 localhost 和 URL 访问它时是 /templates/tutorial.html

然后我可以看到“发送”按钮,但带有这些 $ 符号

$def with (form, text) $:form.render()

$文本

这是tutorial.html

$def with (form, text)

<head>
    <title>Python and AJAX tutorial for beginners with webpy and jQuery</title>
    <link rel="stylesheet" type="text/css" href="/static/tutorial.css" />

    <script type="text/javascript" src="/static/jquery.js"></script>

    <script type="text/javascript">
                            jQuery(document).ready(function() {
                            jQuery(".button").click(function() {
                                    var input_string = $$("input#textfield").val();
                                    jQuery.ajax({
                                            type: "POST",
                                            data: {textfield : input_string},
                                            success: function(data) {
                                            jQuery('#foo').html(data).hide().fadeIn(1500);
                                            },
                                            });
                                    return false;
                                    });
                            });

                    </script>
</head>

<body>
    <br>
    <form class="form" method="post"> 
    $:form.render()
    <input class="button" type="submit" value="send"/>    
    </form>

    <br><br>
    <span id="foo">$text</span>        
</body>

我怎样才能得到这些变量的值?

$def with (form, text) $:form.render()

$文本

于 2013-08-27T13:49:52.907 回答