Веб-форма с Web.py на PythonAnywhere
Я пытаюсь сделать простой веб-скрипт, используя платформу 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>
И это должно дать результат после 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 формы. На самом деле, когда вы смотрите на исходный код страницы формы, вы видите, что то, что я предполагал, было формой простой. Поэтому я только что превратил форму в шаблон для тестирования непосредственно в html, и теперь она работает довольно хорошо. Просто глупая ошибка, но если кто-то еще придет через это, просто сделайте то же самое. Спасибо вам всем.
2 ответа
Кажется, что переменная в шаблоне finaliza на самом деле должна быть "Ном". Так:
Congratulations $:Nome !
Мог бы сделать трюк. Не забудьте перезапустить свое веб-приложение на вкладке Web в PythonAnywhere после внесения изменений, иначе вы их не увидите.
Я использую ту же структуру 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 ()
$ текст