在PythonAnywhere上使用Web.py的Web窗体

jon*_*epp 5 python forms post web.py pythonanywhere

我正在尝试使用PythonAnywhere.com的web.py平台制作一个简单的Web脚本.我的目的是创建一个simples Form,它可以获取文本框的数据,并且可以像使用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()
Run Code Online (Sandbox Code Playgroud)

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

$def with (form)

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

这应该在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>
Run Code Online (Sandbox Code Playgroud)

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

我从web.py和PythonAnywhere开始,所以必须有一些我做错了但我找不到它.你能帮帮我吗?谢谢.

编辑:

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

解决了:

好.我意识到该form.Form()选项并不真正创建和html表单输出.实际上,当你查看formtest页面的源代码时,你会发现我认为表单看起来很简单.所以我只是直接在html中将表单转换为formtest模板,现在它工作得很好.只是一个愚蠢的错误,但如果其他人通过它,就做同样的事情.谢谢你们.

ayc*_*dee 3

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

Congratulations $:Nome ! 
Run Code Online (Sandbox Code Playgroud)

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