在PythonAnywhere上使用Web.py创建网页表单
我正在尝试使用PythonAnywhere.com的web.py平台制作一个简单的网页脚本。我的目的是创建一个简单的表单,能够获取文本框中的数据,并像我们在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>
而这个模板应该在提交后显示结果:
$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,所以我可能做错了什么,但我找不到问题所在。你能帮我一下吗?谢谢。
编辑:
我刚刚发现,如果我把文本框的值作为字符串传递,结果就会不同。结果页面显示“恭喜你,None!”这让我觉得POST请求实际上没有接收到我在文本框中输入的值。所以代码看起来没问题,但不知怎么的,我没有正确处理,导致无法获取表单输入的值。还是不行。
解决了:
好的。我意识到form.Form()
这个选项并没有真正创建一个HTML表单输出。实际上,当你查看formtest页面的源代码时,你会发现我以为是表单的地方其实只是一个简单的
2 个回答
我正在使用相同的web.py框架。当我通过本地地址访问它,网址是/templates/tutorial.html时,
我可以看到一个“发送”按钮,但上面有这些$符号。
$def with (form, text)
$:form.render()
$text
这是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()
$text
看起来最后的模板里用的变量应该是“Nome”。所以:
Congratulations $:Nome !
这样可能就能解决问题。记得在PythonAnywhere的Web选项卡里重启你的网页应用,这样才能看到你所做的更改。